Java8 - 对流(数据)进行自定义分块:partitioningBy收集器

Java8 - 对流(数据)进行自定义分块:partitioningBy收集器

2018-09-27 16:22:02 JavaJava8 46 0

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
赞赏支持!
partitioningBy数据分块
上一篇:Java8 - 更优雅的字符串连接(join)收集器 Collectors.joining 下一篇:Java8 - 对流(数据)进行自定义分组:groupingBy收集器

文章评论

欢迎一起交流

评论框加载中......