JDK11 |パートIV:拡張API

I.はじめに

JDKは9〜11文法変化の面で小さな言語があり、新しいAPIのかなりの数は、このセクションの下に新しいが、JDK1.8のAPIの後のいくつかを説明して追加します。

第二に、強化されたAPI

強化されたAPI 1.コレクション

(一覧/設定/地図)を添加し、2不変なコレクションを作成して使用し、その違いを見るために使用されている方法のcopyOfされているコレクションですジャワ9、JDK以来。

/**
 * 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);
}
复制代码

並べ替えやその他の操作、または報告され、追加、削除、交換することはできません不変なコレクションを作成した()メソッドのコレクション使用は、java.lang.UnsupportedOperationException例外を。

2.ストリーム強化API

ストリームが8のJavaの新機能で、Javaの9は、ストリームは、次の4つの新しいメソッドが追加され始めました。

単一コンストラクタのパラメータを大きくすると、nullの場合もあります

@Test
public void test1() {
    long count = Stream.ofNullable( null ).count();
    System.out.println(count);
}
复制代码

DropWhile方法とtakeWhileを高めます

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.オプションの拡張機能API

Opthonalも簡単に任意の時間ストリームに変換する場合、または、必要に応じてヌルそれに代わることができ、いくつかの方法がクール追加します。

@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);
}
复制代码

入力ストリーム強化API

入力ストリームは、最終的に非常に有用な方法た: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

これは、HTTPクライアントAPIのHTTPリクエストの処理のJavaの9の導入の始まりで、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();

    }
}
复制代码

ようこそスキャンコードまたは私が心配「プログラマのフルーツ」公共のマイクロチャンネル番号を検索し、〜懸念の驚きがあります

おすすめ

転載: juejin.im/post/5cee51e6f265da1ba2524179