對流(資料)進行自定義分塊:partitioningBy收集器
阿新 • • 發佈:2018-12-15
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