利用Java8新特性 Stream來處理你的代碼

前言

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

總結

用了這些是不是感覺自己代碼變得很優雅,高大上的樣子!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章