所以这是我的代码:
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(...))
代码中执行此操作?谢谢!
答案 0 :(得分:2)
其中一个解决方案是在收集结果进行映射之前移动值转换。它使您可以过滤掉空值
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));