Stream流对list<map>的操作

java 复制代码
Map<String,Object> map = new HashMap<>();
        map.put("name","张三");
        map.put("age","30");
        map.put("sex","男");
        map.put("addr","深圳");
        List<Map<String,Object>> list = new ArrayList<>();
        list.add(map);
        map = new HashMap<>();
        map.put("name","李四");
        map.put("age","31");
        map.put("sex","男");
        map.put("addr","北京");
        list.add(map);
        map = new HashMap<>();
        map.put("name","王五");
        map.put("age","35");
        map.put("sex","男");
        map.put("addr","深圳");
        list.add(map);
        // 根据addr住址分组
        Map<String, List<Map<String, Object>>> addr = list.stream().collect(Collectors.groupingBy(m -> MapUtils.getString(m, "addr")));
        System.out.println("分组"+addr);
        // 遍历分组后的数据
        addr.forEach((k,v)->{

            System.out.println("map中的key:"+k);
            v.forEach((kk)->{
                System.out.println("listMap中的数据"+kk);
            });
        });

        // 过滤,保留匹配的数据
        List<Map<String, Object>> mapStream = list.stream().filter(m -> MapUtils.getString(m, "addr").equals("深圳")).collect(Collectors.toList());
        System.out.println("过滤:"+mapStream);
        // 过滤,第一条匹配的数据
        Optional<Map<String, Object>> first = list.stream().filter(m -> MapUtils.getString(m, "addr").equals("深圳")).findFirst();
        System.out.println("过滤:"+first);

        // 去重
        List<String> collect = list.stream().map(m -> MapUtils.getString(m, "addr")).distinct().collect(Collectors.toList());
        System.out.println("去重"+collect);

        // 升序
        List<Map<String, Object>> sort1 = list.stream().sorted(Comparator.comparing(m -> MapUtils.getString(m, "age"))).collect(Collectors.toList());
        System.out.println("升序"+sort1);
        // 降序
        List<Map<String, Object>> sort2 = list.stream().sorted(Comparator.comparing(m -> MapUtils.getString((Map) m, "age")).reversed()).collect(Collectors.toList());
        System.out.println("降序:"+sort2);

        //创建城市
        List<String> cityList = new ArrayList<String>();
        cityList.add("北京;上海;深圳;");
        cityList.add("广州;武汉;杭州;");

        // 将数据按照逗号分割组成完整的字符串
        String collect1 = cityList.stream().map(c -> c.split(";")).flatMap(Arrays::stream).collect(Collectors.joining(","));
        System.out.println("将数据按照逗号分割组成完整的字符串"+collect1);

输出结果:

分组{北京=[{sex=男, name=李四, addr=北京, sage=31}], 深圳=[{sex=男, name=张三, addr=深圳, age=30}, {sex=男, name=王五, addr=深圳, age=35}]}

map中的key:北京

listMap中的数据{sex=男, name=李四, addr=北京, age=31}

map中的key:深圳

listMap中的数据{sex=男, name=张三, addr=深圳, age=30}

listMap中的数据{sex=男, name=王五, addr=深圳, age=35}

过滤:[{sex=男, name=张三, addr=深圳, age=30}, {sex=男, name=王五, addr=深圳, age=35}]

过滤:Optional[{sex=男, name=张三, addr=深圳, age=30}]

去重[深圳, 北京]

升序[{sex=男, name=张三, addr=深圳, age=30}, {sex=男, name=李四, addr=北京, age=31}, {sex=男, name=王五, addr=深圳, age=35}]

降序:[{sex=男, name=王五, addr=深圳, age=35}, {sex=男, name=李四, addr=北京, age=31}, {sex=男, name=张三, addr=深圳, age=30}]

将数据按照逗号分割组成完整的字符串北京,上海,深圳,广州,武汉,杭州

相关推荐
YJlio5 小时前
7.4.5 Windows 11 企业网络连接与网络重置实战:远程访问、本地策略与故障恢复
前端·chrome·windows·python·edge·机器人·django
猪哥-嵌入式5 小时前
在Windows 11上本地部署DeepSeek-R1 14B量化版:完整避坑指南(模型不占C盘+国内网络优化)
windows·ai
小陈的进阶之路6 小时前
Python系列课(5)——数据容器
windows·python
不怕犯错,就怕不做7 小时前
RK3562的CPU如何降频及关闭硬件编解码
linux·驱动开发·嵌入式硬件
CoderMeijun7 小时前
Linux 文件操作详解:open/read/write/lseek 系统调用
linux·文件操作·系统调用·open·文件描述符
可可西里_X_back7 小时前
Linux学习(二)- 驱动开发步骤
linux·驱动开发·学习
Hical_W8 小时前
Hical 踩坑实录五部曲(二):MSVC / GCC / Clang 三平台 C++20 编译差异
linux·windows·经验分享·嵌入式硬件·macos·开源·c++20
mianfeixz9 小时前
生化危机9安魂曲修改器2026最新版
windows
活蹦乱跳酸菜鱼9 小时前
linux ATF BL2执行过程
linux
hele_two9 小时前
VS Code + CMake 调用 SDL2 & SDL2_image 完整编译教程(Windows 平台)
c++·windows·vscode·图形渲染