【问题标题】:Removing value of nested Map in another map删除另一个地图中嵌套地图的值
【发布时间】:2019-09-05 10:16:36
【问题描述】:

在我有简单的地图之前,例如:Map<String, Book>。我需要为这张地图添加钥匙,所以它看起来像这样Map<String, Map<String, Book>>

我需要在某些情况下删除条目,然后:

map.entrySet()
                .removeIf(matches -> getMinuteDiffrenceBetweenActualAndGivenDate(ChronoUnit.MINUTES, matches.getValue()
                        .getDateOfCreation()) >= 20);

现在我需要做同样的事情,我不能使用get(),因为我需要遍历外部映射中的所有值。

我尝试过这样做:

map.entrySet().removeIf(matches -> matches.getValue().getValue()...

但我不明白为什么我没有 getValue() 方法来获取 Book 对象。

【问题讨论】:

标签: java lambda stream


【解决方案1】:

matches.getValue()Map,而不是 Map.Entry,因此它没有 getValue() 方法。

您可以遍历外部Map 的值并删除内部Map 的条目:

map.values()
   .forEach(inner -> inner.entrySet().removeIf(matches -> 
       getMinuteDiffrenceBetweenActualAndGivenDate(ChronoUnit.MINUTES, 
                                                   matches.getValue().getDateOfCreation()) >= 20));

编辑:

要删除外部 Map 的条目:

map.entrySet()
   .removeIf(entry -> entry.getValue()
                           .values()
                           .stream()
                           .anyMatch(book -> /*some boolean expression*/));

【讨论】:

  • 是否有可能删除整个条目?我写错了,因为在我们删除值之前它正在删除整个条目并且现在导致错误。
  • @mara122 您要删除哪个条目?外部 Map 的条目还是内部 Map 的条目?
  • 外图,所以结果会完全去掉k&v。
  • 是的,这就是我想要的。谢谢。
  • 你太棒了! @Eran
猜你喜欢
  • 2012-05-15
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
相关资源
最近更新 更多