所以这是我的代码:
HashMap<String, List<Foo.Builder>> strFooMap = new HashMap<>();
// add stuff to strFooMap and do other things
return new HashMap<>(strFooMap.entrySet()
.stream()
.collect(Collectors.toMap(Entry::getKey,
entry -> entry
.getValue()
.stream()
.filter(builder -> {
// do some conditional stuff to filter
})
.map(builder -> {
return builder.build();
})
.collect(Collectors.toList())
)
)
);
所以有时候,在完成
filter
之后,我的List<Foo.Builder>
中的所有项目都会被过滤掉。然后在我的最终HashMap
中,我有一个像这样的条目:{"someStr" -> []}
。我想删除值是空列表的键值对。我将如何去做呢?在.stream().collect(Collectors.toMap(...))
代码中可以这样做吗?谢谢! 最佳答案
解决方案之一是在收集结果到地图之前转移价值转换。它使您可以过滤出空值
List<Foo> transformValue(List<Foo.Builder> value) {
//original value transformation logic
}
<K,V> Entry<K,V> pair(K key, V value){
return new AbstractMap.SimpleEntry<>(key, value);
}
strFooMap.entrySet().stream()
.map(entry -> pair(entry.getKey(), transformValue(entry.getValue()))
.filter(entry -> !entry.getValue().isEmpty())
.collect(toMap(Entry::getKey, Entry::getValue));