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