如何从Java中的LinkedHashMap <string,double =“”>中获取单独的数据

时间:2016-03-13 10:41:52

标签: java linkedhashmap

我使用了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());

2 个答案:

答案 0 :(得分:1)

您可以使用LinkedHashMap#get(Object key)方法

将返回与key参数对应的值。由于您的密钥为String,因此您无法使用int来检索密钥。

实施例

如果您的LinkedHashMap包含["key", 2.5],请致电

System.out.println(lnkHashMap.get("key"));

将打印

2.5

加成

如果您使用的是,则可以使用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>

Java 8解决方案

private static <K, V> Optional<V> getByInsertionOrder(LinkedHashMap<K, V> linkedHashMap, int index) {
    return linkedHashMap.values().stream()
        .skip(index)
        .findFirst();
}

Java 7 Soution

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