您现在的位置是:首页 > 文章详情

JDK11 | 第四篇 : 增强API

日期:2019-05-29点击:318

文章首发于公众号《程序员果果》

地址 : https://mp.weixin.qq.com/s/O0xntC-JfeSBk-9x2QfwnA

一、简介

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(); } }
原文链接:https://yq.aliyun.com/articles/704084
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章