这是我的代码:
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())
)
)
);
Run Code Online (Sandbox Code Playgroud)
所以有时候,执行完后filter
,my中的所有项目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));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3589 次 |
最近记录: |