前言 |
Java8的API中添加了一個新的特性: 流,即stream。stream是將數組或者集合的元素視爲流,流在管道中流動過程中,對數據進行篩選、排序和其他操作。因爲流申明式處理數據集合的特點,可以讓代碼變得簡潔易讀
filter |
過濾出list中不是空的
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream()
.filter(string -> !string.isEmpty())
.collect(Collectors.toList());
System.out.println(filtered);
// [abc, bc, efg, abcd, jkl]
forEach |
循環輸出list中不爲空的所有數據
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
filtered.forEach(System.out::println);
/*
abc
bc
efg
abcd
jkl
*/
map |
過濾出list中不爲空的數據,然後讓他們自身加上自身,並循環打印出來
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
List<String> squaresList = filtered.stream().map( i -> i+i).distinct().collect(Collectors.toList());
squaresList.forEach(System.out::println);
/*
abcabc
bcbc
efgefg
abcdabcd
jkljkl
*/
Collectors |
在list的每個元素之間加上三個逗號,並把list轉爲string
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(",,, "));
System.out.println(mergedString);
// abc,,, bc,,, efg,,, abcd,,, jkl
summaryStatistics |
統計list中最大數,最小數,所有數值和,平均數
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();
System.out.println("列表中最大的數 : " + stats.getMax()); // 列表中最大的數 : 7
System.out.println("列表中最小的數 : " + stats.getMin()); // 列表中最小的數 : 2
System.out.println("所有數之和 : " + stats.getSum()); // 所有數之和 : 25
System.out.println("平均數 : " + stats.getAverage()); // 平均數 : 3.5714285714285716
總結 |
用了這些是不是感覺自己代碼變得很優雅,高大上的樣子!