【发布时间】:2021-01-19 11:44:05
【问题描述】:
List<Map<String, Object>> apptlist = jdbcTemplate.queryForList(sb.toString());
这里有一个清单。在该列表中显示了重复的地图。我需要使用 Java 8 Stream 删除这些重复项。有人可以帮帮我吗?
我试过串流这个
Set<Map<String, Object>> set = new HashSet<>();
apptlist.stream().map(s -> s.toLowerCase()).filter(s -> !set.contains(s)).forEach(set::add);
还有这个
apptlist.stream().distinct().collect(Collectors.toList());
但我没有得到任何结果。不过,我得到了重复。
【问题讨论】:
-
地图的值是否实现
equals和hashCode? -
不,先生。在
equals中实现的值。 -
在什么意义上重复?有些地图是完全平等的吗?即它们的大小相同并且包含完全相同的键值对?
-
“仍然,我得到了重复”你不是。这段代码甚至没有通过编译器。
-
如何在
Map上调用toLowerCase()?除此之外,Set根据定义不包含重复项。这就是.filter(s -> !set.contains(s))毫无意义的原因;add方法无论如何都不会添加重复项。除非您对“重复”的想法与 Java 不同。但在这种情况下,contains检查仍然毫无意义,因为它使用与Set.add相同的“重复”定义。
标签: java collections java-8 stream