JDK11 | 第四篇 : 增强API
文章首发于公众号《程序员果果》
一、简介
JDK 9~11 在语言语法方面有一个小改动,增加了相当数量的新API,这一节讲解下JDK1.8之后新增的一些API。
二、增强API
1. 集合的增强api
自Java 9开始,Jdk里面为集合(List / Set / Map)都添加了of和copyOf方法,它们两个都用来创建不可变的集合,来看下它们的使用和区别。
/**
* List的增强api
*/
@Test
public void test1() {
List<String> list = List.of( "aa", "bb", "cc", "dd" );
System.out.println( list );
// 抛出java.lang.UnsupportedOperationException 异常
list.add( "ee" );
System.out.println( list );
}
/**
* Set的增强api
*/
@Test
public void test2() {
Set<Integer> set1 = Set.of( 100 , 30 ,20 ,15);
System.out.println(set1);
// 抛出java.lang.IllegalArgumentException: duplicate element: 20
Set<Integer> set2 = Set.of( 100 , 30 ,20 ,15 ,20 ,15 );
// 抛出java.lang.UnsupportedOperationException 异常
set2.add( 10 );
System.out.println(set2);
}
/**
* Map的增强api
*/
@Test
public void test3() {
Map<String , Integer> map = Map.of("a" , 1 , "b" , 2 , "c" , 3);
// 抛出java.lang.UnsupportedOperationException 异常
map.put( "d" , 4 );
System.out.println(map);
}
使用of()方法创建的集合,为不可变集合,不能进行添加、删除、替换、排序等操作,不然会报 java.lang.UnsupportedOperationException 异常。
2. Stream的增强api
Stream 是 Java 8 中的新特性,Java 9 开始对 Stream 增加了以下 4 个新方法。
增加单个参数构造方法,可为null
@Test
public void test1() {
long count = Stream.ofNullable( null ).count();
System.out.println(count);
}
增加 takeWhile 和 dropWhile 方法
takeWhile:从集合开头提取符合条件的元素
@Test
public void test2() {
List<Integer> res = Stream.of( 1, 2, 3,4, 0, 1 )
.takeWhile( n -> n < 4 )
.collect( Collectors.toList() );
System.out.println(res);
}
dropWhile:从集合开头移除前符合条件的元素
@Test
public void test3() {
List<Integer> res = Stream.of( 1, 2, 3,4, 0, 1 )
.dropWhile( n -> n < 4 )
.collect( Collectors.toList() );
System.out.println(res);
}
3. 字符串增强api
Java 11增加了一系列的字符串处理方法。
@Test
public void test1() {
//判断字符串是否为空白
boolean res1 = " ".isBlank();
//true
System.out.println(res1);
//去除首尾空格
String res2 = " java ~ ".strip();
// "java ~"
System.out.println(res2);
//去除尾部空格
String res3 = " java ~ ".stripTrailing();
//" java ~"
System.out.println(res3);
//去除首部空格
String res4 = " java ~ ".stripLeading();
//"java ~ "
System.out.println(res4);
//复制字符串
String res5 = "java".repeat( 3 );
// "java"
System.out.println(res5);
//行数统计
long res6 = "A\nB\nC".lines().count();
//3
System.out.println(res6);
}
4. Optional增强api
Opthonal也增加了几个非常酷的方法,现在可以很方便的将一个可选转换成一个Stream,或者当一个空可选时给它一个替代的。
@Test
public void test1() {
//java ~
String res1 = Optional.of( "java ~" ).orElseThrow();
System.out.println(res1);
//1
long res2 = Optional.of( "java ~" ).stream().count();
System.out.println(res2);
//java ~
Object res3 = Optional.ofNullable( null )
.or( () -> Optional.of( "java ~" ) )
.get();
System.out.println(res3);
}
5. 输入流增强api
InputStream终于有了一个非常有用的方法:transferTo,可以用来将数据直接传输到OutputStream,这是在处理原始数据流时非常常见的一种用法。
@Test
public void test1() {
try {
InputStream inputStream = TestInputStream.class.getClassLoader().getResourceAsStream("test.txt");
var file = new File("/Users/xxx/test2.txt");
try (var outputStream = new FileOutputStream(file)) {
inputStream.transferTo(outputStream);
}
} catch (IOException e) {
e.printStackTrace();
}
}
6. HTTP客户端增强api
这是Java 9开始引入的一个处理HTTP请求的的化化HTTP Client API,该API支持同步和异步,而在Java 11中已经为正式可用状态,你可以在java.net包中找到这个API。
@Test
public void test1() {
try {
var request = HttpRequest.newBuilder()
.uri( URI.create("http://t.weather.sojson.com/api/weather/city/101020100"))
.GET()
.build();
var client = HttpClient.newHttpClient();
// 同步
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
//异步
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
} catch (Exception e) {
e.printStackTrace();
}
}
关注我
欢迎扫码或微信搜索公众号《程序员果果》关注我,更多精彩内容不能错过 ~~
(转载本站文章请注明作者和出处 程序员果果的博客)
JDK11 | 第四篇 : 增强API的更多相关文章
- Spring Cloud第十四篇 | Api网关Zuul
本文是Spring Cloud专栏的第十四篇文章,了解前十三篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring C ...
- 第四篇 SQL Server代理配置数据库邮件
本篇文章是SQL Server代理系列的第四篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.SQL Serve ...
- ElasticSearch查询 第四篇:匹配查询(Match)
<ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...
- 【译】第四篇 SQL Server代理配置数据库邮件
本篇文章是SQL Server代理系列的第四篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.SQL Serve ...
- EnjoyingSoft之Mule ESB开发教程第四篇:Mule Expression Language - MEL表达式
目录 1. MEL的优势 2. MEL的使用场景 3. MEL的示例 4. MEL的上下文对象 5. MEL的Variable 6. MEL访问属性 7. MEL操作符 本篇主要介绍Mule表达式语言 ...
- 第四篇Scrum冲刺博客
第四篇Scrum冲刺博客 一.站立式会议 提供当天站立式会议照片一张 二.每个人的工作 成员 已完成工作 明天计划完成的工作 遇到的困难 林剑峰 用户界面跳转到用户信息页面的按钮,设计用户信息页面 测 ...
- Docker实战 | 第四篇:Docker启用TLS加密解决暴露2375端口引发的安全漏洞,被黑掉三台云主机的教训总结
一. 前言 在之前的文章中 IDEA集成Docker插件实现一键自动打包部署微服务项目,其中开放了服务器2375端口监听,此做法却引发出来一个安全问题,在上篇文章评论也有好心的童鞋提示,但自己心存侥幸 ...
- 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)
从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...
- 第四篇 Entity Framework Plus 之 Batch Operations
用 Entity Framework 进行 增,删,改.都是基于Model进行的,且Model都是有状态追踪的.这样Entity Framework才能正常增,删,改. 有时候,要根据某个字段,批量 ...
随机推荐
- “HTTP 错误 404.15 - Not Found 请求筛选模块被配置为拒绝包含的查询字符串过长的请求”之解决办法
今天同事在做通过接口访问数据时,由于提交的一个参数内容比较多,导致测试时报了以下错误. 同时页面又给出了以下提示: 所以最终根据在网上找了相关资料总结出一下解决办法. 1. 在Web.config配置 ...
- Top 8 Diagrams for Understanding Java
Reference: http://www.programcreek.com/2013/09/top-8-diagrams-for-understanding-java/ A diagram is s ...
- jquery +点击按钮,切换div内容,按钮加高亮
html: <div class="dw4"> <span class="dw">单位(次)</span> <div ...
- 七夕-心形表白-简单css代码
今天你要和谁过? 今天你要怎么过?? 今天去哪里吃??? 公司的三连问,对于一些单身狗有点招架不住啊. 在此送上一个薄礼,来安慰下受伤的心灵... 确定是安慰不是连环打击嘛..... 回答:确定! 来 ...
- Ubuntu 16.04下使用docker部署ceph集群
ceph集群docker部署 通过docker可以快速部署小规模Ceph集群的流程,可用于开发测试. 以下的安装流程是通过linux shell来执行的:假设你只有一台机器,装了linux(如Ubun ...
- 设计模式学习笔记——Bridge 桥接模式
先说一下我以前对桥接模式的理解:当每个类中都使用到了同样的属性或方法时,应该将他们单独抽象出来,变成这些类的属性和方法(避免重复造轮子),当时的感觉是和三层模型中的model有点单相似,也就是让mod ...
- Spring Cloud Commons教程(二)Spring RestTemplate作为负载平衡器客户端
RestTemplate可以自动配置为使用功能区.要创建负载平衡RestTemplate创建RestTemplate @Bean并使用@LoadBalanced限定符. 警告 通过自动配置不再创建Re ...
- Spring Cloud教程(九)应用程序上下文服务
Spring Boot对于如何使用Spring构建应用程序有一个看法:例如它具有常规配置文件的常规位置,以及用于常见管理和监视任务的端点.Spring Cloud建立在此之上,并添加了一些可能系统中所 ...
- 大数据笔记(八)——Mapreduce的高级特性(A)
一.序列化 类似于Java的序列化:将对象——>文件 如果一个类实现了Serializable接口,这个类的对象就可以输出为文件 同理,如果一个类实现了的Hadoop的序列化机制(接口:Writ ...
- 《SQL Server 2012 T-SQL基础》读书笔记 - 2.单表查询
Chapter 2 Single-Table Queries GROUP BY之后的阶段的操作对象就是组(可以把一组想象成很多行组成的)了,HAVING负责过滤掉一些组.分组后的COUNT(*)表示每 ...