JDK11 | Часть IV: Расширение API

I. Введение

JDK 9 ~ 11 есть небольшой язык с точки зрения изменений грамматики, добавляет значительное количество новых API, новый В этом разделе описаны некоторые из после JDK1.8 API.

Во-вторых, расширение API

Enhanced апи 1. Сбор

Поскольку Java 9, JDK, который представляет собой сборник добавлена ​​и copyOf методов, которые используются для создания два непреложных сбора, использование и посмотреть на их различии (List / Set / Карта) является.

/**
 * 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. Поток

Поток это новая функция в 8 Java, Java 9 начал поток добавляет следующие четыре новые методы.

Увеличение одного параметра конструктора может быть пустым

@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. Улучшенная строка апи

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. Дополнительные усовершенствования апи

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

Входной поток усиливается апи

InputStream, наконец, имеет очень полезный метод: о переходе, может быть использован для передачи данных непосредственно к 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 обработки запроса API HTTP HTTP клиент, то API поддерживает как синхронные и асинхронные, и уже официально доступен, вы можете найти этот API в пакете java.net в Java 11.

@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