如何使用Google集合将List<String>转换为Map<String,String>?

2022-08-31 20:23:13

我有一个字符串列表,我有一个函数为列表中的每个键生成一个值。

我想使用此功能创建地图。我可以对谷歌收藏夹执行此操作吗?


答案 1

使用 Maps.uniqueIndex(可迭代,函数):

返回一个不可变映射,其 Map.values() 是给定顺序中的给定元素,每个键是对其相应值调用所提供函数的乘积。(来自javadoc)

例:

Map<String,String> mappedRoles = Maps.uniqueIndex(yourList, new Function<String,String>() {
  public String apply(String from) {
    // do stuff here
    return result;
  }});

答案 2

截至2012年7月26日,番石榴大师包含两种新的方法来做到这一点。它们应该在 14.0 版中。

Maps.asMap(Set<K>, Function<? super K, V>)(和 的两个重载)允许您将加号 a 视为 a,其中集合中每个键的值是将函数应用于该键的结果。结果是一个视图,因此它不会复制输入集,结果将随该集而变化,反之亦然。SortedSetNavigableSetSetFunctionMapMap

Maps.toMap(Iterable<K>, Function<? super K, V>)take a 并热切地将其转换为 a,其中可迭代对象的不同元素是键,值是将函数应用于每个键的结果。IterableImmutableMap