【问题标题】:guava - filter and transform mapguava - 过滤和变换贴图
【发布时间】:2014-09-24 18:03:58
【问题描述】:

过滤和转换Map 的值的最有效方法是什么。我习惯使用FluentIterable 进行此类操作,但不适用于Map。

Maps.transformValues(Maps.filterValues(map, predicate), function) 是最佳选择吗?

【问题讨论】:

  • 快速查看javadocs 会发现transformValues 和filterValues 返回装饰器。因此,get、put 等的复杂性取决于filter 和transform 函数的复杂性。完整的副本可能更有效。
  • 你的意思是我应该在最后制作一张新地图,还是在filterValues之后?
  • 这取决于您如何使用Map<K, V>。装饰器Map<K, V>s 的主内存开销是装饰器函数。不过,当您访问装饰器 Map<K, V>(s) 时,通常会遇到这两个函数的复杂性。

标签: map filtering guava transformation


【解决方案1】:

基本解决方案是,如果您知道使用Map 的唯一方法是准确地迭代条目一次,那么您就可以了。但是,如果您打算使用get、put,或者您可能会多次迭代,建议创建一个新的Map,以便过滤和转换的工作只完成一次。

Maps.newHashMap(Maps.transformValues(Maps.filterValues(map, predicate), function));

filter 和 transform 的顺序在这里是正确的,因此您不会过滤掉 transform 值。

【讨论】:

    猜你喜欢
    • 2011-05-15
    • 2013-10-10
    • 2017-10-12
    • 2011-09-08
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多