美文网首页
Java9的一些学习碎片

Java9的一些学习碎片

作者: 会九卦的兔子 | 来源:发表于2018-08-19 22:56 被阅读0次

    of() 方法
    可以创建的类有 Set、 List、Map

      List list = List.of();
      Set s = Set.of();
      Map m = Map.of();
    

    也可以创建有值的集合

      List list = List.of("value1","value2","value3");
      Set s = Set.of("value1","value2","value3");
      Map m = Map.of((1, "value1", 2, "value2", 3, "value3");
    

    接口中引入私有方法

    public interface TestInterface{
      private static void displayCardDetails(){
        // Method implementation goes here.
      }
    }
    

    对Java7 提出的Try-With-Resources 用法进行了优化
    下面是Java7的实现方式

    void testARM_Before_Java9() throws IOException{
     BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt"));
     try (BufferedReader reader2 = reader1) {
       System.out.println(reader2.readLine());
     }
    }
    

    这是Java9的实现方式:

    void testARM_Before_Java9() throws IOException{
     BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt"));
     try (reader1) {
       System.out.println(reader1.readLine());
     }
    }
    

    文档的是如果我们有一个已经在Try-With-Resource语句外面声明为final或有效final的资源,那么我们就不需要声明一个局部变量。我们可以在Try-With-Resource语句中使用以前创建的变量,没有任何问题。

    进行延时和超时操作,实用方法和更好的子类化的API

      Executor exe = CompletableFuture.delayedExecutor(50L, TimeUnit.SECONDS);
    

    引入了一个新的 Reactive Streams API。
    Java SE 9 Reactive Streams API 是一个发布订阅型框架,使我们能够非常简单地使用 Java 语言就能实现异步的、可拓展的和并行的应用。

    **引入一个新的 Мulti-Resolution Image API。这个 API 中比较重要的接口是 MultiResolutionImage,在 java.awt.image 包下可获取到。用于封装不同高度和宽度图片(不同解决方案)到一个集合中,并允许我们按需查询使用。

    引入新的 HTTP 2 Client API。它将同时支持 HTTP/1.1 和 HTTP/2 协议,也同时支持同步(Blocking Mode)和异步模式,支持 WebSocket API 使用中的异步模式。**

    Java8中的Stream:

    jshell> import java.util.stream.*
    
    jshell> Stream stream = Stream.of(1,2,3,4,5,6,7,8,9,10)
    stream ==> java.util.stream.ReferencePipeline$Head@64bfbc86
    
    jshell> stream.forEach(x -> System.out.println(x));
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    

    Java 9对Stream API进行了改进,向Java.util添加了四个有用的新方法:
    dropWhile
    takeWhile
    iterate
    ofNullable
    由于流是一个接口,所以前两个新方法是默认方法,最后两个是静态方法。其中两个是非常重要的:dropWhile和takeWhile 方法。

    在Stream API中,while()方法返回与谓词条件相匹配的最长前缀元素。
    它以Predicate作为参数。Predicate是布尔表达式,它返回true或false。对于有序和无序的流,它的行为是不同的。让我们用下面一些简单的例子来探索它们。

    default Stream<T> takeWhile(Predicate<? super T> predicate)
    

    如果流是一个有序的,那么当takeWhile方法返回与该Predicate匹配的最长前缀时。结果流只包含与Predicate条件相匹配的前缀元素。

    
    jshell> Stream<Integer> stream = Stream.of(1,2,3,4,5,6,7,8,9,10)
    stream ==> java.util.stream.ReferencePipeline$Head@55d56113
    
    jshell> stream.takeWhile(x -> x < 4).forEach(a -> System.out.println(a))
    1
    2
    3
    
    

    由于这条流是有序的,所以takeWhile方法返回与Predicate相匹配的前三个元素。这里的Predicate是“元素必须小于4”。

    无序的

    jshell> Stream<Integer> stream = Stream.of(1,2,4,5,3,6,7,8,9,10)
    stream ==> java.util.stream.ReferencePipeline$Head@55d56113
    
    jshell> stream.takeWhile(x -> x < 4).forEach(a -> System.out.println(a))
    1
    2
    

    由于这条流是无序的,所以takeWhile方法返回前两个与Predicate相匹配的元素。

    在Stream API中,dropWhile()方法会删除与Predicate相匹配的最长前缀元素,并返回其余的元素。

    
    jshell> Stream<Integer> stream = Stream.of(1,2,3,4,5,6,7,8,9,10)
    stream ==> java.util.stream.ReferencePipeline$Head@55d56113
    
    jshell> stream.dropWhile(x -> x < 4).forEach(a -> System.out.println(a))
    4
    5
    6
    7
    8
    9
    10
    

    由于这条流是有序的,dropWhile()方法首先删除与Predicate相匹配的三个要素,并将剩余的元素返回到结果流中。这里我们的谓词是"元素必须小于4

    Diamond 操作器和匿名内部类的改进

    public List getEmployee(String empid){
        // Code to get Employee details from Data Store
        return new List(emp){ };
    }
    

    这里我们可以只使用“List”,而不指定类型参数。

    删除了一些工具和组件
    移除 rt.jar 和 tools.jar
    移除JavaDB
    删除了JVM TI 工具代理
    删除jhat(Java Heap Analysis Tool)工具
    删除 java-rmi.exe和java-rmi.cgi发射器
    移除了Java VisualVM
    从JMX RMIConnector中移除对IIOP传输的支持
    删除native2ascii工具

    更详细的内容可以去这里看下:https://www.journaldev.com/java

    相关文章

      网友评论

          本文标题:Java9的一些学习碎片

          本文链接:https://www.haomeiwen.com/subject/hkehiftx.html