[英]Use map and filter functions to remove elements from a set which exists in a treemap (Java Collections)
如何使用过滤器功能从像这样的树图中存在的集合中删除元素
TreeSet<Integer> set = new TreeSet<>();
TreeMap<Integer, Integer> map = new TreeMap<>();
set.removeAll(map.entrySet().stream()
.filter(x -> x.getValue()>1).collect(Collectors.toList())) ;
当我运行它时,它给了我
Exception in thread "main" java.lang.ClassCastException: java.util.TreeMap$Entry cannot be cast to java.lang.Comparable
at java.util.TreeMap.getEntry(Unknown Source)
at java.util.TreeMap.remove(Unknown Source)
at java.util.TreeSet.remove(Unknown Source)
at java.util.AbstractSet.removeAll(Unknown Source)
at Main.main
那么如何解决呢? 以及如何使用它们?
解决方案的问题是,当您期望List<Map.Entry>
传递给Itterable
时,将它传递给TreeSet::removeAll
。
set.removeAll(map.entrySet().stream()
.filter(x -> x.getValue() > 1)
.collect(Collectors.toList()));
您要做的就是将每个过滤后的项目映射到一个integer
然后收集它们。
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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.