我已经按照以下方式对HashMap进行了排序。
map.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(Collections.reverseOrder()))
.skip(1)
.limit(50)
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(e1, e2) -> e1,
LinkedHashMap::new
));
我想要做的是从中过滤一些结果,最好使用.filter()
。我想要过滤的项目是ArrayList<String> filterUs;
我该怎么做?
假设我在排序操作后有以下结果
{31795=11, 31790=11, 31876=10, 31803=9, 31792=8, 31877=8, 31851=8, 31845=8}
filterUs = [31790,31876]
我想得到什么:{31795=11, 31803=9, 31792=8, 31877=8, 31851=8, 31845=8, newItem=7, anotherNewItem=6}
答案 0 :(得分:1)
这看起来很有趣,你在那里设置了一个非常复杂的管道,你不能做过滤器?除非我遗漏了一些东西,否则它非常简单。
Map<Integer, Integer> result = map.entrySet().stream()
.sorted(Map.Entry.comparingByValue(Collections.reverseOrder()))
.filter(entry -> !filterUs.contains(entry.getKey()))
.skip(1)
.limit(50)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
答案 1 :(得分:0)
添加
.filter(item -> item.getValue() instanceOf ArrayList)
到流。
结果只包含ArrayList
的条目。如果要删除测试,请反转测试(在!
之后添加->
)。
答案 2 :(得分:0)
要使用它,您可以按照
的方式实现某些功能map.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(Collections.reverseOrder()))
.skip(1)
.filter(entry -> item.getValue() instanceOf ArrayList) // <-- NEW
.limit(50)
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(e1, e2) -> e1,
LinkedHashMap::new
));