guava:将列表转换为以索引为键的映射

时间:2013-10-02 12:45:09

标签: java collections guava

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

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

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

  

0 - &gt; “Pratik”,1-&gt;“Pratik”,2-&gt;“Ram”,3-&gt;“Varun”

1 个答案:

答案 0 :(得分:8)

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

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);
              }
          });

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