【问题标题】:java 8 stream API filter out empty value from mapjava 8流API从地图中过滤出空值
【发布时间】:2017-11-18 00:47:32
【问题描述】:

我有一个地图,需要对每个条目的值进行操作,并返回修改后的地图。我设法让它工作,但结果映射包含具有空值的条目,我想删除这些条目但不能使用 Java 8 流 API。

这是我的原始代码:

Map<String, List<Test>> filtered = Maps.newHashMap();
for (String userId : userTests.keySet()) {
    List<Test> tests = userTests.get(userId);
    List<Test> filteredTests = filterByType(tests, supportedTypes);

    if (!CollectionUtils.isEmpty(filteredTests)) {
        filtered.put(userId, filteredTests);
    }
}
return filtered;

这是我的 Java 8 流 API 版本:

userTests.entrySet().stream()
         .forEach(entry -> entry.setValue(filterByType(entry.getValue(), supportedTypes)));

userTests.entrySet().stream().filter(entry -> !entry.getValue().isEmpty());
        return userTests;
  1. 如何从地图中删除具有空/空值的条目?
  2. 有没有更好的方法在流 API 中编写代码,到目前为止我认为它没有比我的原始代码更好

【问题讨论】:

  • filterByType方法的定义在哪里?

标签: java java-stream


【解决方案1】:

你需要收集到一个新的Map(比如说)

例如

 new HashMap<String, List<String>>().
                entrySet().
                stream().
                filter(entry -> !entry.getValue().isEmpty()).
                collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

就目前而言,您只是返回带有中间(过滤)操作的流。 terminal 操作将执行此操作并为您提供所需的集合。

【讨论】:

    【解决方案2】:

    userTests.entrySet().stream().filter(entry -&gt; !entry.getValue().isEmpty()); 这没有效果。 filter 不是终端操作。

    您需要将流结果收集到新地图中:

    HashMap<String, String> map = new HashMap<>();
    map.put("s","");
    map.put("not empty", "not empty");
    
    Map<String, String> notEmtpy = map.entrySet().stream()
         .filter(e -> !e.getValue().isEmpty())
         .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
    

    【讨论】:

      【解决方案3】:

      尝试在线插入过滤器:

      userTests.entrySet().stream().filter(entry -> !entry.getValue().isEmpty())
      .forEach(entry -> entry.setValue(filterByType(entry.getValue(), supportedTypes)));
      

      【讨论】:

        猜你喜欢
        • 2015-05-14
        • 2021-11-06
        • 1970-01-01
        • 1970-01-01
        • 2019-05-24
        • 2021-06-07
        • 1970-01-01
        • 2021-07-01
        • 1970-01-01
        相关资源
        最近更新 更多