原來 Java8 Stream 中的排序是插入排序
阿新 • • 發佈:2019-02-09
寫了小程式,驗證 Java8 Steam sort是如何實現
package com.pnp.tryJ8col; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class Main { public static void main(String[] args) { Stream.of("3", "1", "5", "4", "2") .sorted((s1, s2) -> { System.out.printf("sort: %s; %s\n", s1, s2); return s1.compareTo(s2); }) .map(s -> { System.out.println("map: " + s); return s; }) .forEach(s -> System.out.println("forEach: " + s)); } }
輸出結果如下:
sort: 1; 3
sort: 5; 1
sort: 5; 3
sort: 4; 3
sort: 4; 5
sort: 2; 4
sort: 2; 3
sort: 2; 1
map: 1
forEach: 1
map: 2
forEach: 2
map: 3
forEach: 3
map: 4
forEach: 4
map: 5
forEach: 5
結論:
1) sort 完結後,管道才繼續執行
2) sort是插入排序(從元素比較的順序可以看出,插入位置通過二分搜尋尋找)