lambda用于比较两个Mapid字段列表中缺少的id

jutyujz0  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(430)

我有两个Map列表,每个Map作为一个id字段。我需要将这两个列表相互比较,以查找collectionb中缺少的id(下面的“7777”)

List<Map<String, Object>> collectionA = new ArrayList<Map<String, Object>>() {{
        add(new HashMap<String, Object>() {{ put("id", "5555"); }});
        add(new HashMap<String, Object>() {{ put("id", "6666"); }});
        add(new HashMap<String, Object>() {{ put("id", "7777"); }});
        add(new HashMap<String, Object>() {{ put("id", "8888"); }});
    }};

    List<Map<String, Object>> collectionB = new ArrayList<Map<String, Object>>() {{
        add(new HashMap<String, Object>() {{
            add(new HashMap<String, Object>() {{ put("id", "5555"); }});
            add(new HashMap<String, Object>() {{ put("id", "6666"); }});
            add(new HashMap<String, Object>() {{ put("id", "8888"); }});
        }});
    }};

我真的很想了解更多关于stream()的信息,所以对此的任何帮助都将不胜感激。如你所知,我真的不确定从何说起:
我开始走这条路,但似乎这不是正确的方法。

List<String> bids = collectionB.stream()
        .map(e -> e.entrySet()
            .stream()
            .filter(x -> x.getKey().equals("id"))
            .map(x -> x.getValue().toString())
            .collect(joining("")
        )).filter(x -> StringUtils.isNotEmpty(x)).collect(Collectors.toList());

我想这会让我得到两个字符串列表,我可以比较,但似乎这不是最佳的方法。感谢您的帮助。

50pmv0ei

50pmv0ei1#

如果要从中筛选项目的Map collectionA 不存在于 collectionB ,迭代 collectionA 并检查每个条目是否存在于 MapcollectionB ,最后收集进入 Map 这是不存在的 collectionB ```
List<Map<String,String>> results = collectionA.stream()
.flatMap(map->map.entrySet().stream())
.filter(entry->collectionB.stream().noneMatch(bMap->bMap.containsValue(entry.getValue())))
.map(entry-> Collections.singletonMap(entry.getKey(),entry.getValue()))
.collect(Collectors.toList());

相关问题