Home | 簡體中文 | 繁體中文 | 雜文 | 知乎專欄 | Github | OSChina 博客 | 雲社區 | 雲棲社區 | Facebook | Linkedin | 視頻教程 | 打賞(Donations) | About
知乎專欄多維度架構 | 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者”

1.8. Stream

1.8.1. Stream.of

		
Stream<String> stream = Stream.of("Hollis", "HollisChuang", "hollis", "Hello", "HelloWorld", "Hollis");		
		
		

1.8.2. Stream.ofNullable

增加單個參數構造方法,可為null

		
Stream.ofNullable(null).count(); // 0		
		
		

1.8.3. filter

filter 方法用於通過設置的條件過濾出元素。以下代碼片段使用 filter 方法過濾掉空字元串:

		
List<String> strings = Arrays.asList("Hollis", "", "HollisChuang", "H", "hollis");
strings.stream().filter(string -> !string.isEmpty()).forEach(System.out::println);		
		
		

1.8.4. map

map 方法用於映射每個元素到對應的結果,以下代碼片段使用 map 輸出了元素對應的平方數:

		
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
numbers.stream().map( i -> i*i).forEach(System.out::println);
//9,4,4,9,49,9,25
		
		

1.8.5. limit/skip

limit 返回 Stream 的前面 n 個元素;skip 則是扔掉前 n 個元素。以下代碼片段使用 limit 方法保理4個元素:

		
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
numbers.stream().limit(4).forEach(System.out::println);
//3,2,2,3		
		
		

1.8.6. sorted

sorted 方法用於對流進行排序。以下代碼片段使用 sorted 方法進行排序:

		
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
numbers.stream().sorted().forEach(System.out::println);
//2,2,3,3,3,5,7		
		
		

1.8.7. distinct

distinct主要用來去重,以下代碼片段使用 distinct 對元素進行去重:

		
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
numbers.stream().distinct().forEach(System.out::println);
//3,2,7,5		
		
		

1.8.8. forEach

Stream 提供了方法 'forEach' 來迭代流中的每個數據。以下代碼片段使用 forEach 輸出了10個隨機數:

		
Random random = new Random();
random.ints().limit(10).forEach(System.out::println);
		
		

1.8.9. count

count用來統計流中的元素個數。

		
List<String> strings = Arrays.asList("Hollis", "HollisChuang", "hollis","Hollis666", "Hello", "HelloWorld", "Hollis");
System.out.println(strings.stream().count());
//7
		
		

1.8.10. collect

collect就是一個歸約操作,可以接受各種做法作為參數,將流中的元素累積成一個彙總結果:

		
List<String> strings = Arrays.asList("Hollis", "HollisChuang", "hollis","Hollis666", "Hello", "HelloWorld", "Hollis");
strings  = strings.stream().filter(string -> string.startsWith("Hollis")).collect(Collectors.toList());
System.out.println(strings);
//Hollis, HollisChuang, Hollis666, Hollis	
		
		

1.8.11. takeWhile 和 dropWhile

增加 takeWhile 和 dropWhile 方法

		
Stream.of(1, 2, 3, 2, 1)
.takeWhile(n -> n < 3)
.collect(Collectors.toList()); // [1, 2]
		
		

從開始計算,當 n < 3 時就截止

		
Stream.of(1, 2, 3, 2, 1)
.dropWhile(n -> n < 3)
.collect(Collectors.toList()); // [3, 2, 1]
		
		

1.8.12. List to Stream

		
List<String> strings = Arrays.asList("Hollis", "HollisChuang", "hollis", "Hello", "HelloWorld", "Hollis");
Stream<String> stream = strings.stream();		
		
		

1.8.13. 混合使用的例子

		
List<String> strings = Arrays.asList("Hollis", "HollisChuang", "hollis", "Hello", "HelloWorld", "Hollis");
Stream s = strings.stream().filter(string -> string.length()<= 6).map(String::length).sorted().limit(3)
            .distinct();