使用map和filter函数从树映射(Java集合)中存在的集合中删除元素

使用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

如何使用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())) ; 

那么如何解决这个问题呢?以及如何使用它们?

解决方案的问题是,您正在将
列表
传递给
树集::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]