所以这是我的代码:

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));

10-02 11:15
查看更多