版权声明:知识诚无价,分享价更高。 https://blog.csdn.net/u013955940/article/details/83054026
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
本文首发于个人独立博客,文章链接:http://www.zebe.me/java-8-stream-partitioning-by