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

Pra*_*lar 3 java collections guava

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

List<String> names = new ArrayList<String>();
names.add("Pratik");
names.add("Pratik");
names.add("Ram");
names.add("Varun");
Run Code Online (Sandbox Code Playgroud)

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

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

Lau*_*ntG 8

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

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

System.out.println(map);
Run Code Online (Sandbox Code Playgroud)

打印:

{0=Pratik, 1=Pratik, 2=Ram, 3=Varun}
Run Code Online (Sandbox Code Playgroud)

如果您绝对想要使用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);
              }
          });
Run Code Online (Sandbox Code Playgroud)

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