获取嵌套的Hashmap值

时间:2016-10-30 11:13:16

标签: java hashmap nested

我有这个变量:

b

我有第一个(整数)和第三个元素(Character),我想用函数得到第二个整数。我该怎么办? 我知道如何从普通的Hashmap变量中获取值,但我不知道如何使用嵌套的hashmap ...

我已经尝试过这个:

    Observable<String> cache = Observable.timer(2, TimeUnit.SECONDS)
    .map(new Function<Long, String>() {
        public String apply(Long t) throws Exception {
            System.out.println("Invoking cached");
            return "cached";
        }
    });

    Observable<String> original = Observable.timer(5, TimeUnit.SECONDS)
        .map(new Function<Long, String>() {
            public String apply(Long t) throws Exception {
                System.out.println("Invoking original");
                return "originalBackend";
            }
        });

    Observable<String> originalOnce = original.cache();
    Observable<String> result = cache.takeUntil(originalOnce).mergeWith(originalOnce);

    result.subscribe(new Consumer<String>() {
        public void accept(String result) throws Exception {
            System.out.println(result);
        }
    });

我想打印7但这个打印件给我null。

更新:解决此问题的最佳方法是更改​​结构。 HashMap不是为了从值获取索引而设计的。但是,有一种方法(见下文)。

1 个答案:

答案 0 :(得分:1)

HashMap并非旨在通过值获取密钥,而这正是您尝试使用.get(c)进行的操作。它旨在获取给定键的值。

如果您想要有效查找,可能应该更改数据结构。

否则,您将不得不迭代内部Map的条目以找到具有所请求值的密钥(可能有多个此类密钥)。

例如:

HashMap<Integer,Character> inner = map.get(0);
Integer key = null;
if (inner != null) {
    for (Map.Entry<Integer,Character> entry : inner.entrySet()) {
        if (entry.getValue().equals('c')) {
            key = entry.getKey();
            break;
        }
    }
}