1. 程式人生 > >對流(資料)進行自定義分塊:partitioningBy收集器

對流(資料)進行自定義分塊:partitioningBy收集器

partitioningBy收集器

在JDK8中,可以對流進行方便的自定義分塊,通常是根據某種過濾條件將流一分為二。

例如:有一組人名,包含中文和英文,在 JDK8 中可以通過 partitioningBy 收集器將其區分開來。

下面是程式碼例子:

// 建立一個包含人名稱的流(英文名和中文名)
Stream<String> stream = Stream.of("Alen", "Hebe", "Zebe", "張成瑤", "鍾其林");
// 通過判斷人名稱的首字母是否為英文字母,將其分為兩個不同流
final Map<Boolean, List<String>>
map = stream.collect(Collectors.partitioningBy(s -> { // 如果是英文字母,則將其劃分到英文人名,否則劃分到中文人名 int code = s.codePointAt(0); return (code >= 65 && code <= 90) || (code >= 97 && code <= 122); })); // 輸出分組結果 map.forEach((isEnglishName, names) -> { if (isEnglishName) {
System.out.println("英文名稱如下:"); } else { System.out.println("中文名稱如下:"); } names.forEach(name -> System.out.println("\t" + name)); });

程式輸出結果如下:

中文名稱如下:
	張成瑤
	鍾其林
英文名稱如下:
	Alen
	Hebe
	Zebe