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

版权声明:知识诚无价,分享价更高。 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

猜你喜欢

转载自blog.csdn.net/u013955940/article/details/83054026