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()// 去重

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

相关推荐
*小海豚*5 分钟前
在linux服务器上DNS正常,但是java应用调用第三方解析域名报错
java·linux·服务器
春日见6 分钟前
如何创建一个PR
运维·开发语言·windows·git·docker·容器
C++ 老炮儿的技术栈9 分钟前
VS2015 + Qt 实现图形化Hello World(详细步骤)
c语言·开发语言·c++·windows·qt
撩得Android一次心动20 分钟前
Android LiveData 全面解析:使用Java构建响应式UI【源码篇】
android·java·android jetpack·livedata
组合缺一24 分钟前
Solon AI (Java) v3.9 正式发布:全能 Skill 爆发,Agent 协作更专业!仍然支持 java8!
java·人工智能·ai·llm·agent·solon·mcp
MSTcheng.28 分钟前
【C++】C++11新特性(二)
java·开发语言·c++·c++11
一 乐32 分钟前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
KIKIiiiiiiii33 分钟前
微信个人号API二次开发中的解决经验
java·人工智能·python·微信
80530单词突击赢34 分钟前
SpringBoot整合SpringMVC全解析
java·spring boot·后端
vx1_Biye_Design43 分钟前
基于Spring Boot+Vue的学生管理系统设计与实现-计算机毕业设计源码46223
java·vue.js·spring boot·spring·eclipse·tomcat·maven