删除列表中的重复项<;地图<;字符串,对象>&燃气轮机;在java中使用流
删除列表中的重复项<;地图<;字符串,对象>&燃气轮机;在java中使用流,java,collections,java-8,stream,Java,Collections,Java 8,Stream,List-apptlist=jdbcTemplate.queryForList(sb.toString()) 这是我的名单。在该列表中显示了重复的地图。我需要使用Java8流删除这些重复项。有人能帮我吗 我试过这个 Set<Map<String, Object>> set = new HashSet<>(); apptlist.stream().map(s -> s.toLowerCase()).filter(s -> !set.contains(
List-apptlist=jdbcTemplate.queryForList(sb.toString())代码>
这是我的名单。在该列表中显示了重复的地图。我需要使用Java8流删除这些重复项。有人能帮我吗
我试过这个
Set<Map<String, Object>> set = new HashSet<>();
apptlist.stream().map(s -> s.toLowerCase()).filter(s -> !set.contains(s)).forEach(set::add);
但我没有得到任何结果。尽管如此,我还是得到了重复项。您不需要流API,创建集将删除重复项:
Set<Map<String, Object>> set = new HashSet<>(list);
Set Set=newhashset(列表);
假设equals map具有相同的键,并且映射中与该键相关联的值实现了equals
和hashCode
当它们的长度相等时,对于每个键map1[key]。equals(map2[key])
String
在java中有适当的equals方法,但Object
没有。
默认值等于
对象的实现比较对象的地址,而不是其字段值
当使用适当的equals
方法(如Integer
import java.util.List;
导入java.util.Map;
导入java.util.array;
导入java.util.HashMap;
导入java.util.stream.collector;
班长{
公共静态void main(字符串[]args){
Map map1=新的HashMap();
Map map2=新的HashMap();
map1.put(“a”,1);
map1.put(“b”,2);
map2.put(“a”,1);
map2.put(“b”,2);
List-mapList=Arrays.asList(map1,map2);
System.out.println(mapList.stream().distinct().collect(Collectors.toList());
}
}
map的值是否实现了等于和哈希代码?无sir。在中实现的值等于。在什么意义上重复?有些地图是完全相等的吗?i、 e.它们大小相同,包含完全相同的键值对?“但是,我得到了重复项”您没有。此代码甚至没有通过编译器。如何在映射上调用toLowerCase()
?除此之外,根据定义,集合
不包含重复项。这就是为什么.filter(s->!set.contains(s))
毫无意义;add
方法无论如何都不会添加重复项。除非您对“复制”的概念与Java不同。但是在这种情况下,contains
检查仍然没有意义,因为它使用了与Set.add相同的“duplicate”定义。
Set<Map<String, Object>> set = new HashSet<>(list);
[{a=1, b=2}]