【问题标题】:guava: Transform a list to a map with the index as the keyguava:将列表转换为以索引为键的映射
【发布时间】:2013-10-02 12:45:09
【问题描述】:

在我的应用程序中,我有一个列表名称。我希望将其转换为基于索引值的地图。例如

List<String> names = new ArrayList<String>();
names.add("Pratik");
names.add("Pratik");
names.add("Ram");
names.add("Varun");

你能帮我一些 guava/java api 方法,它可以帮助我获得一个地图,其中键是索引,值是名称,即使有重复的值?所以如果名称中有两个“Pratik”字符串。地图应该是这样的

0 -> "Pratik", 1->"Pratik",2->"Ram",3->"Varun"

【问题讨论】:

  • 你为什么需要它?你会以与 List 完全相同的方式使用它......你只会有相当多的地图开销......我只看到缺点,而这种方法没有优点。
  • 为什么不简单地循环并构建地图。它只有 2 行代码。

标签: java collections guava


【解决方案1】:

我认为你在这里不需要番石榴:

Map<Integer, String> map = new HashMap<Integer, String>();
int i = 0;
for (String name : names) {
    map.put(i++, name);
}

System.out.println(map);

打印:

{0=Pratik, 1=Pratik, 2=Ram, 3=Varun}

如果您绝对想要一种使用 Guava 的方法,您可以这样做(但我建议使用 JDK 方法以避免不必要的复杂性):

Maps.asMap(
     ContiguousSet.create(Range.closedOpen(0, names.size()), DiscreteDomain.integers()),
          new Function<Integer, String>() {
              @Override
              public String apply(Integer input) {
                  return names.get(input);
              }
          });

顺便说一句,我不明白你为什么要这样做。

【讨论】:

    猜你喜欢
    • 2013-07-23
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多