使用map和filter函数从树映射(Java集合)中存在的集合中删除元素
如何使用filter函数从树映射中的集合中删除元素使用map和filter函数从树映射(Java集合)中存在的集合中删除元素,java,dictionary,filter,set,Java,Dictionary,Filter,Set,如何使用filter函数从树映射中的集合中删除元素 TreeSet<Integer> set = new TreeSet<>(); TreeMap<Integer, Integer> map = new TreeMap<>(); set.removeAll(map.entrySet().stream() .filter(x -> x.getValue()>1).collect(Collectors.toList
TreeSet<Integer> set = new TreeSet<>();
TreeMap<Integer, Integer> map = new TreeMap<>();
set.removeAll(map.entrySet().stream()
.filter(x -> x.getValue()>1).collect(Collectors.toList())) ;
那么如何解决这个问题呢?以及如何使用它们?解决方案的问题是,您正在将
列表
传递给树集::removeAll
,而它需要一个可写的
set.removeAll(map.entrySet().stream()
.filter(x -> x.getValue() > 1)
.collect(Collectors.toList()));
您需要做的是将每个过滤项映射到一个整数
,然后收集这些项
set.removeAll(map.entrySet().stream()
.filter(x -> x.getValue() > 1)
.map(Map.Entry::getValue) // get the value itself and collect those instead.
.collect(Collectors.toList()));
以下是执行的测试:
TreeSet<Integer> set = new TreeSet<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7));
TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>() {{
put(1, 1); put(2, 2); put(3, 3);
}};
set.removeAll(map.entrySet().stream()
.filter(x -> x.getValue() > 1)
.map(Map.Entry::getValue)
.collect(Collectors.toList()));
System.out.println(set); // prints [1, 4, 5, 6, 7]
TreeSet set=newtreeset(Arrays.asList(1,2,3,4,5,6,7));
TreeMap map=newtreemap(){
推杆(1,1);推杆(2,2);推杆(3,3);
}};
set.removeAll(map.entrySet().stream())
.filter(x->x.getValue()>1)
.map(map.Entry::getValue)
.collect(Collectors.toList());
系统输出打印项次(设置);//印刷品[1,4,5,6,7]
@Carcigenicate classcastexception请在您的question@Carcigenicate这里是您试图从集合
中删除条目
项的完整错误,这毫无意义,因此JVM正确地进行了抱怨。
TreeSet<Integer> set = new TreeSet<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7));
TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>() {{
put(1, 1); put(2, 2); put(3, 3);
}};
set.removeAll(map.entrySet().stream()
.filter(x -> x.getValue() > 1)
.map(Map.Entry::getValue)
.collect(Collectors.toList()));
System.out.println(set); // prints [1, 4, 5, 6, 7]