Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 番石榴:将列表转换为以索引为键的地图_Java_Collections_Guava - Fatal编程技术网

Java 番石榴:将列表转换为以索引为键的地图

Java 番石榴:将列表转换为以索引为键的地图,java,collections,guava,Java,Collections,Guava,在我的应用程序中,我有一个名字列表。我希望将其转换为基于索引值的映射。比如说 List<String> names = new ArrayList<String>(); names.add("Pratik"); names.add("Pratik"); names.add("Ram"); names.add("Varun"); List name=new ArrayList(); 名称。添加(“Pratik”); 名称。添加(“Pratik”); 名称。添加(“Ram”

在我的应用程序中,我有一个名字列表。我希望将其转换为基于索引值的映射。比如说

List<String> names = new ArrayList<String>();
names.add("Pratik");
names.add("Pratik");
names.add("Ram");
names.add("Varun");
List name=new ArrayList();
名称。添加(“Pratik”);
名称。添加(“Pratik”);
名称。添加(“Ram”);
名称。添加(“瓦伦”);
你能帮我介绍一些guava/JavaAPI方法吗?它可以帮助我得到一个映射,其中键是索引,值是名称,即使有重复的值?因此,如果名称中有两个“Pratik”字符串。地图应该是这样的

0->“普拉蒂克”,1->“普拉蒂克”,2->“拉姆”,3->“瓦伦”


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

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

System.out.println(map);
如果您确实想用番石榴做这件事,您可以这样做(但我建议使用JDK方法来避免不必要的复杂性):

Maps.asMap(
ContiguousSet.create(Range.closedOpen(0,names.size()),DiscreteDomain.integers()),
新函数(){
@凌驾
公共字符串应用(整数输入){
返回name.get(输入);
}
});

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

你为什么需要这样做?你会用和列表一样的方式使用它。。。你只有相当多的地图开销。。。我只看到这种方法的缺点,没有优点。为什么不简单地循环并构建地图呢。只有两行代码。
{0=Pratik, 1=Pratik, 2=Ram, 3=Varun}
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);
              }
          });