我使用了LinkedHashMap<String, Double>
。我想从中获取单独的值。如果是Array
,我们可以使用.get[2]
,.get[5]
等获取第2和第5个值。但对于LinkedHashMap<String, Double>
如何做到这一点。我使用以下代码。但它会打印LinkedHashMap<String, Double>
中包含的所有值。我需要单独拍摄。
Set set = mylist.entrySet();
Iterator i = set.iterator();
while(i.hasNext()) {
Map.Entry me1 = (Map.Entry)i.next();
System.out.print(me1.getKey());
System.out.println(me1.getValue());
答案 0 :(得分:1)
您可以使用LinkedHashMap#get(Object key)
方法
将返回与key参数对应的值。由于您的密钥为String
,因此您无法使用int
来检索密钥。
如果您的LinkedHashMap
包含["key", 2.5]
,请致电
System.out.println(lnkHashMap.get("key"));
将打印
2.5
如果您使用的是java-8,则可以使用Stream
对象进行解决方法。
Double result = hashmap.values()
.stream()
.skip(2)
.findFirst()
.get();
这将跳过两个第一个值并直接转到第三个值并返回它。
如果没有,这是一个解决方案
public <T> T getValueByIndex (Map<? extends Object, T> map, int index){
Iterator<T> it = map.values().iterator();
T temp = null;
for (int i = 0 ; i < index ; i++){
if (it.hasNext()){
temp = it.next();
} else {
throw new IndexOutOfBoundsException();
}
}
return temp;
}
答案 1 :(得分:1)
可能是您为了您的目的使用了错误的数据结构。
如果仔细观察LinkedHashMap API,您会注意到它确实是一张地图,访问之前存储的值的唯一方法是提供密钥。
但是如果你真的认为你需要根据插入顺序(或访问顺序)访问LinkedHashMap的第i 个值,你可以使用如下的简单实用方法: / p>
private static <K, V> Optional<V> getByInsertionOrder(LinkedHashMap<K, V> linkedHashMap, int index) {
return linkedHashMap.values().stream()
.skip(index)
.findFirst();
}
private static <K, V> V getByInsertionOrder(LinkedHashMap<K, V> linkedHashMap, int index) {
if (index < 0 || index >= linkedHashMap.size()) {
throw new IndexOutOfBoundsException();
}
Iterator<Entry<K, V>> iterator = linkedHashMap.entrySet().iterator();
for (int i = 0; i < index; i++) {
iterator.next();
}
return iterator.next().getValue();
}