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 小时前
Spring Boot:模块化实战 - 保持清晰架构
java·spring boot·架构
r***99826 小时前
mysql9.0windows安装
windows·adb
小坏讲微服务6 小时前
SpringBoot4.0整合knife4j 在线文档完整使用
java·spring cloud·在线文档·knife4j·文档·接口文档·swagger-ui
8***Z896 小时前
springboot 异步操作
java·spring boot·mybatis
i***13246 小时前
Spring BOOT 启动参数
java·spring boot·后端
坚持不懈的大白6 小时前
后端:SpringMVC
java
IT_Octopus6 小时前
(旧)Spring Securit 实现JWT token认证(多平台登录&部分鉴权)
java·后端·spring
kk哥88996 小时前
Spring详解
java·后端·spring
S***26756 小时前
Spring Cloud Gateway 整合Spring Security
java·后端·spring
OneLIMS6 小时前
Windows Server 2022 + IIS + ASP.NET Core 完整可上传大文件的 报错的问题
windows·后端·asp.net