JAVA stream().flatMap()

简单来说map 是对每一个元素单独处理后单独存放,flatMap 是把每个元素转换成流之后合并成一个流然后这个被合并的流可以再被处理

比如如果你想要把一个类中的tags去重并筛选中不是"技术"的标签你就可以使用flatMap

复制代码
public static void main(String[] args) throws Exception {
    class User {
        private String name;
        private List<String> tags;

        public User(String name, List<String> tags) {
            this.name = name;
            this.tags = tags;
        }

        public List<String> getTags() { return tags; }
    }
    List<User> users = Arrays.asList(
            new User("张三", Arrays.asList("技术", "音乐")),
            new User("李四", Arrays.asList("旅行", "技术")),
            new User("王五", Arrays.asList("美食", "旅行"))
    );

    List<String> allTags = users.stream()
            .flatMap(user -> user.getTags().stream()) // 流合并
            .filter(s->!s.contains("技术")) //判断
            .distinct()// 去重
            .collect(Collectors.toList());
    System.out.println(allTags);

}

这样可以一步到位,避免了,先提取,然后去重,然后判断。

这里的user.getTags().stream()如果使用的是map()那么会报错,因为map是直接处理完之后送入集合,现在user.getTags().stream()并不是一个String类型的所以会报错。

flatMap是利用user.getTags().stream()把所有的元素处理并总和成一个流,然后使用

.filter(s->!s.contains("技术")) //判断 .distinct()// 去重

去处理之后再送入集合中去

相关推荐
JosieBook3 小时前
【远程运维】Linux 远程连接 Windows 好用的软件:MobaXterm 实战指南
linux·运维·windows
颜如玉3 小时前
🤲🏻🤲🏻🤲🏻临时重定向一定要能重定向🤲🏻🤲🏻🤲🏻
java·http·源码
程序员的世界你不懂4 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
星空寻流年4 小时前
设计模式第一章(建造者模式)
java·设计模式·建造者模式
gb42152875 小时前
java中将租户ID包装为JSQLParser的StringValue表达式对象,JSQLParser指的是?
java·开发语言·python
曾经的三心草6 小时前
Python2-工具安装使用-anaconda-jupyter-PyCharm-Matplotlib
android·java·服务器
Metaphor6926 小时前
Java 高效处理 Word 文档:查找并替换文本的全面指南
java·经验分享·word
ChinaRainbowSea6 小时前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程
stormsha6 小时前
飞算JavaAI炫技赛电商系统商品管理模块的架构设计与实现
java·架构·鸿蒙系统