JDK9-15的新特性

简介: JDK 9增加 了 List.of()、Set.of()、Map.of() 和 Map.ofEntries()等工厂方法来创建不可变集合,类似于ImmutableMap.of()静态方法。不可变集合不能进行添加、删除、替换、 排序等操作,不然会报java.lang.UnsupportedOperationException 异常。

JDK9-15的新特性

内容学习自知秋老师的翻译课程

JDK 9增加 了 List.of()、Set.of()、Map.of() 和 Map.ofEntries()等工厂方法来创建不可变集合,类似于ImmutableMap.of()静态方法。不可变集合不能进行添加、删除、替换、 排序等操作,不然会报java.lang.UnsupportedOperationException 异常。
Collectors 中增加了新的方法 filtering() 和 flatMapping()。
Collectors 的 filtering() 方法类似于 Stream 类的 filter() 方法,都是用于过滤元素。
JDK 9 Stream 中增加了新的方法 ofNullable()、dropWhile()、takeWhile() 以及 iterate() 方法的重载方法。
Java 9 中的 ofNullable() 方 法允许我们创建一个单元素的 Stream,可以包含一个非空元素,也可以创建一个空 Stream。而在 Java 8 中则不可以创建空的 Stream 。

copyOf方法

代码示例

package com.wxit.api;

import java.util.ArrayList;
import java.util.List;

/**
 * @author wj
 * @date 2021.09.25 09:49
 */
public class CopyOfApiDemo {

    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("吴杰");
        names.add("婷姐");
        names.add("佳伟");

        List<String> copyOfNames = List.copyOf(names);
        doNotChange(copyOfNames);
        System.out.println(copyOfNames);
    }

    private static void doNotChange(List<String> copyOfNames) {
        copyOfNames.add("子龙");
    }
}

jdk11中引进的方法writeString 和 readString

代码示例

package com.wxit.api;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * @author wj
 * @date 2021.09.26 20:58
 */
public class FileReadWriteRunner {

    /*
    可以看到,使用这些特定的新方法,readString 和 writeString 使得从文件中读取可写入变的更加容易
     */
    public static void main(String[] args) throws IOException {
        Path path = Paths.get("./resource/sample.txt");
        String fileContent = Files.readString(path);
        System.out.println(fileContent);

        String newFileContent = fileContent.replace("wujie", "xiaohao");
        Path newFilePath = Paths.get("./resource/sample-new.txt");
        Files.writeString(newFilePath,newFileContent);
    }
}

jdk11中引进的Predicate.not方法

代码示例

package com.wxit.api;

import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Stream;

/**
 * @author wj
 * @date 2021.09.26 21:16
 */
public class PredicateNotRunner {

    public static void main(String[] args) {
        List<Integer> numbers = List.of(12,25,36,24,13,125);
        Predicate<Integer> evenNumberPredicate = number -> number % 2 ==0;
//        Stream<Integer> integerStream = numbers.stream().filter(evenNumberPredicate);
//        integerStream.forEach(s -> System.out.println(s));

        numbers.stream().filter(evenNumberPredicate.negate()).forEach(System.out::println);

    }
}
相关文章
|
1月前
|
Java API
JDK8到JDK25版本升级的新特性问题之使用Collectors.teeing()来计算一个列表中学生的平均分和总分如何操作
JDK8到JDK25版本升级的新特性问题之使用Collectors.teeing()来计算一个列表中学生的平均分和总分如何操作
|
1月前
|
Java API Apache
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
|
1月前
|
Oracle Java 关系型数据库
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
|
1月前
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
|
1月前
|
Java 编译器 API
JDK版本特性问题之在 JDK 17 中,想声明一个密封类,如何解决
JDK版本特性问题之在 JDK 17 中,想声明一个密封类,如何解决
|
1月前
|
Java API 开发者
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
|
17天前
|
Java 编译器 API
JDK8新特性--lambda表达式
JDK8的Lambda表达式是Java语言的一大进步。它为Java程序提供了更多的编程方式,让代码更加简洁,也让函数式编程的概念在Java中得到了体现。Lambda表达式与Java 8的其他新特性,如Stream API、新的日期时间API一起,极大地提高了Java编程的效率和乐趣。随着时间的流逝,Java开发者对这些特性的理解和应用将会越来越深入,进一步推动Java语言和应用程序的发展。
8 0
|
1月前
|
算法 Java iOS开发
JDK8到JDK27版本升级的新特性问题之JDK 17中G1在资源占用方面有何变化
JDK8到JDK27版本升级的新特性问题之JDK 17中G1在资源占用方面有何变化
|
1月前
|
XML JSON Java
JDK8到JDK26版本升级的新特性问题之在JDK 13中,字符串文本块改进字符串嵌入是如何实现的
JDK8到JDK26版本升级的新特性问题之在JDK 13中,字符串文本块改进字符串嵌入是如何实现的
|
1月前
|
Java 编译器 开发者
JDK8到JDK23版本升级的新特性问题之编写一个简单的module-info.java文件,如何实现
JDK8到JDK23版本升级的新特性问题之编写一个简单的module-info.java文件,如何实现