【问题标题】:Equivalent of Guavas Maps.uniqueIndex(...) for Set等价于 Set 的 Guavas Maps.uniqueIndex(...)
【发布时间】:2014-12-11 13:44:04
【问题描述】:

Guava 有一个静态方法Maps.uniqueIndex(Iterable<V> values, Function<? super V,K> keyFunction),它通过应用于各个元素的输入函数的结果来映射输入集合中的每个条目。

对于 Sets(返回值不是 map 而是 set)有这个函数的等价物吗?

【问题讨论】:

    标签: java collections guava


    【解决方案1】:

    一些替代方案:

    Maps.uniqueIndex(values, keyFunction).keySet();
    ImmutableSet.copyOf(Collections2.transform(values, function));
    

    【讨论】:

    • 我想到了这两种方法,但是创建地图只是为了获取它的关键集(1.解决方案),或者创建一个未知的集合然后是实际的集合似乎有点无效复制(2.解决方案)。可惜 Guava 不支持这个。
    • @Jardo:不要忘记转换后的集合不是副本,而是原始集合的实时视图。
    • Jardo:Collections.transform 返回 O(1) 视图;它不贵。 (并且由于填充,集合实际上并不比地图便宜;它们只是不维护对值对象的引用。)
    • 你说得对,我想这毕竟不是一个糟糕的解决方案。
    【解决方案2】:

    我实际上找到了一个直截了当的解决方案:

    FluentIterable.from(values).transform(keyFunction).toSet();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-24
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 2013-06-18
      • 2017-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多