Java-Java8特性(完結)
阿新 • • 發佈:2020-09-11
Java8新特性
之前零零散散寫了很多java8的內容,今天做一個整理,也算是整理用到的內容,當然細化的話還有很多,只是說暫時用不到,為了面試的話已經夠了
- Lambda表示式
- 函式式介面(比較器Comparator介面)
- 方法引用
- Stream流操作
- Optional
- Base64
- 其他(HashMap效能提升,IO/NIO改進)
-
Lambda表示式
有句話感覺說的很好,Lambda主要就是簡潔程式碼量,
-
函式式介面
之前筆記:https://www.cnblogs.com/meditation5201314/p/13192254.html
-
方法引用
就是內部使用靜態類,簡化程式碼
//Hero內部中: public static int compareByName(Hero a, Hero b) { return a.getName().compareToIgnoreCase(b.getName()); } /*************************************************************/ Hero[] heros = new Hero[]{ new Hero("ASDF3", 12, 12), new Hero("ASDF2", 12, 12), new Hero("ASDF", 12, 12), new Hero("ASDF", 12, 12) }; /*從小到大排序*/ //匿名類 Arrays.sort(heros, new Comparator<Hero>() { @Override public int compare(Hero o1, Hero o2) { return o1.getName().compareTo(o2.getName()); } }); //Lambda表示式 Arrays.sort(heros, (Hero o1, Hero o2) -> { return o1.getName().compareTo(o2.getName()); }); //方法引用 Arrays.sort(heros, Hero::compareByName); Arrays.stream(heros).forEach(System.out::println);
-
Stream流操作
具體可以見學習連結:https://how2j.cn/k/lambda/lambda-lamdba-tutorials/697.html
昨天的非同步Stream也包含在這裡面:https://www.cnblogs.com/meditation5201314/p/13647538.html
String[] strings = new String[]{"asdf", "fsdfa", "asdff"}; Arrays.stream(strings).filter(s -> s.startsWith("a")).forEach(System.out::println); Arrays.stream(strings).map(String::toUpperCase).sorted((a, b) -> a.compareTo(b)).forEach(System.out::println); System.out.println(Arrays.stream(strings).allMatch(s -> s.startsWith("a"))); System.out.println(Arrays.stream(strings).filter(s -> s.startsWith("a")).count());
-
Optional
Optional<String> reduced = Arrays.stream(strings).sorted().reduce((s1, s2) -> s1 + "$" + s2); reduced.ifPresent(System.out::println);
Hero hero = new Hero(); Hero newHero = new Hero(); newHero.setName("這是新Hero"); Optional<Hero> heroOptional = Optional.ofNullable(hero); heroOptional.ifPresent(System.out::println); //不為空就輸出 System.out.println(heroOptional.orElse(newHero)); //不為空就原樣輸出,為空就輸出新的 System.out.println(heroOptional.orElseGet(()->functionReturn())); //不為空就原樣輸出,為空就輸出函式返回值 System.out.println("========"); System.out.println(heroOptional.map(hero1 -> hero1.getName()).map(name-> name.toUpperCase()).orElse("asdf")); //迴圈檢查
-
Base64
public class Base64 { public static void main(String[] args){ final String text = "Base64 finally in Java 8!"; final String encoded = java.util.Base64.getEncoder().encodeToString(text.getBytes(StandardCharsets.UTF_8)); System.out.println(encoded); final String decoded = new String(java.util.Base64.getDecoder().decode(encoded), StandardCharsets.UTF_8); System.out.println(decoded); } }
-
其他
HashMap引入紅黑樹,效能得到優化(之前一直以為都有紅黑樹,結果是java8引入的)
Io/Nio
遍歷當前目錄的檔案和目錄
Files.list(new File(".").toPath()).forEach(System.out::println);