【发布时间】:2020-11-29 18:09:57
【问题描述】:
我有两个地图列表,每个地图都有一个 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());
我想这会让我得到两个可以比较的字符串列表,但这似乎不是最佳方法。任何帮助表示赞赏。
【问题讨论】:
-
对于初学者,您为什么使用
e.entrySet().stream()而不是e.get("id")?