删除列表中的重复项<;地图<;字符串,对象>&燃气轮机;在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}]