使用Java8的Stream对两个 List 遍历匹配数据的优化处理

2023-01-02 00:00:00 优化 遍历 匹配

使用场景,有两个List<Map<String,Object>>集合,第一个集合的所有元素都是需要保留的。

第一个集合的值为:

{name=张三丰1, id=1}
{name=张三丰2, id=2}
{name=张三丰3, id=3}
{name=张三丰4, id=4}
{name=张三丰5, id=5}
{name=张三丰6, id=6}
{name=张三丰7, id=7}
{name=张三丰8, id=8}

第二个集合的值为:

{grade=61, id=1}
{grade=62, id=2}
{grade=63, id=3}
{grade=64, id=4}

需要根据两个集合中id值相同,就把第二个集合中的grade值赋给第一个集合,如果不匹配,默认grade值为0

结果是这样:

{grade=61, name=张三丰1, id=1}
{grade=62, name=张三丰2, id=2}
{grade=63, name=张三丰3, id=3}
{grade=64, name=张三丰4, id=4}
{grade=0, name=张三丰5, id=5}
{grade=0, name=张三丰6, id=6}
{grade=0, name=张三丰7, id=7}
{grade=0, name=张三丰8, id=8}

具体实现代码:

    @Test
    public void demo01(){
        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
        for (int i=1;i<9;i++){
            Map<String,Object> map = new HashMap<>();
            map.put("id",i);
            map.put("name","张三丰"+i);
            list.add(map);
        }
        Stream<Map<String, Object>> s1 = list.stream();
        list.stream().forEach(map-> System.out.println(map));

        List<Map<String,Object>> list2 = new ArrayList<Map<String,Object>>();
        for (int i=1;i<5;i++){
            Map<String,Object> map2 = new HashMap<>();
            map2.put("id",i);
            map2.put("grade",i+60);
            list2.add(map2);
        }
        list2.stream().forEach(s-> System.out.println(s));
/**
 *  List<Map<Object, Object>> resultList = oneList.stream().map(map -> twoList.stream()
 *                 .filter(m -> Objects.equals(m.get("id"), map.get("id")))
 *                 .findFirst().map(m -> {
 *                     map.putAll(m);
 *                     map.put("grade",90);
 *                     return map;
 *                 }).orElse(null))
            *                 .filter(Objects::nonNull).collect(Collectors.toList());
 */
      /* List<Map<String, Object>> resultList2 = list.stream().map(m->{
                    m.put("grade",0);
                    for (int i=0;i<list2.size();i++){
                        if(m.get("id").equals(list2.get(i).get("id"))){
                            m.put("grade",list2.get(i).get("grade"));
                            break;
                        }
                    }
                    return m;
                }).collect(Collectors.toList());*/
        List<Map<String, Object>> resultList2 = list.stream().map(m->{
            m.put("grade",0);
            list2.stream().filter(m2->Objects.equals(m.get("id"), m2.get("id"))).forEach(s-> m.put("grade",s.get("grade")));
            return m;
        }).collect(Collectors.toList());
        resultList2.stream().forEach(s-> System.out.println(s));
    }

看到最后,喜欢的小伙伴就不要吝啬的帮忙扫码关注一下了,谢谢。

微信扫一扫:关注我个人订阅号“猿小飞”,更多精彩文章在这里及时发布:

《使用Java8的Stream对两个 List 遍历匹配数据的优化处理》

    原文作者:猿小飞
    原文地址: https://blog.csdn.net/u011442726/article/details/96770773
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章