JDK7和JDK8一些重要新特性


jdk7新特性(部分)

  • switch支持字符串
  • List tempList = new ArrayList<>(),泛型實例化自動推斷
  • AutoCloseable接口實現自動關閉,在try()中
  • 新增獲取環境信息的工具方法,getJavaHomeDir,getUserHomeDir,getUserDir等
  • 對java集合的增強支持,如:
      List<String> list=["item"]; //向List集合中添加元素
      String item=list[0]; //從List集合中獲取元素

      Set<String> set={"item"}; //向Set集合對象中添加元素

      Map<String,Integer> map={"key":1}; //向Map集合中添加對象
      int value=map["key"]; //從Map集合中獲取對象
  • 數值可以加下划線,int one_million = 1_000_000;
  • 在try catch異常撲捉中,一個catch可以寫多個異常類型,用"|"隔開;

jdk8新特性(部分)

  • 接口可以添加默認方法,default;
  • lambda表達式,對於接口可以直接用()->{}方式來表達,小括號表示方法入參,花括號內表示方法返回值,如Collections的sort()方法:

Collections.sort(names, (String a, String b) -> {
    return b.compareTo(a);
});
Collections.sort(names, (String a, String b) -> b.compareTo(a));
Collections.sort(names, (a, b) -> b.compareTo(a));

  • 函數式接口,@FunctionalInterface, 將lambda表達式映射到一個單方法的接口上
  • 方法和構造函數的引用,可以使用::,如Integer::valueOf
  • lambda表達式訪問外層作用域和老版本的匿名對象中的方式很像,可以直接訪問標記了final的外層局部變量,或者實例的字段以及靜態變量。
  • java.util.Stream 表示能應用在一組元素上一次執行的操作序列。Stream 操作分為中間操作或者最終操作兩種,最終操作返回一特定類型的計算結果,而中間操作返回Stream本身,這樣你就可以將多個操作依次串起來。

Stream 的創建需要指定一個數據源,比如 java.util.Collection的子類,List或者Set, Map不支持。Stream的操作可以串行執行或者並行執行。


//Filter 過濾
stringCollection
    .stream()
    .filter((s) -> s.startsWith("a"))
    .forEach(System.out::println);

//Sort 排序
stringCollection
    .stream()
    .sorted()
    .filter((s) -> s.startsWith("a"))
    .forEach(System.out::println);
//排序只創建了一個排列好后的Stream,而不會影響原有的數據源,排序之后原數據stringCollection是不會被修改的; 


//Map 映射
//中間操作map會將元素根據指定的Function接口來依次將元素轉成另外的對象,下面的示例展示了將字符串轉換為大寫字符串

stringCollection
    .stream()
    .map(String::toUpperCase)
    .sorted((a, b) -> b.compareTo(a))
    .forEach(System.out::println);
    
//Match 匹配
//Stream提供了多種匹配操作,允許檢測指定的Predicate是否匹配整個Stream。所有的匹配操作都是最終操作,並返回一個boolean類型的值
boolean anyStartsWithA = 
    stringCollection
        .stream()
        .anyMatch((s) -> s.startsWith("a"));

boolean allStartsWithA = 
    stringCollection
        .stream()
        .allMatch((s) -> s.startsWith("a"));


boolean noneStartsWithZ = 
    stringCollection
        .stream()
        .noneMatch((s) -> s.startsWith("z"));
        
//Count 計數
//計數是一個最終操作,返回Stream中元素的個數,返回值類型是long
long startsWithB = 
    stringCollection
        .stream()
        .filter((s) -> s.startsWith("b"))
        .count();

//Reduce 規約
//這是一個最終操作,允許通過指定的函數來講stream中的多個元素規約為一個元素,規越后的結果是通過Optional接口表示的
Optional<String> reduced =
    stringCollection
        .stream()
        .sorted()
        .reduce((s1, s2) -> s1 + "#" + s2);
    reduced.ifPresent(System.out::println);

  • java.time下包含了全新的時間日期API
  • 支持多重注解

參考這里


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM