代码之家  ›  专栏  ›  技术社区  ›  Senthil Kumaran

Java 8.从键集创建索引映射的惯用方法?

  •  3
  • Senthil Kumaran  · 技术社区  · 10 年前

    我想从 keyset() 现有的 HashMap 将键映射到映射中的索引。

    这是我的尝试,有效:

    Map<String, Integer> keysToIndex = new HashMap<>();
    Integer index = 0;
    for (String obj: hashMap.keySet()) {
        keysToIndex.put(obj, index);
        index += 1;
    }
    

    Java8是否提供了创建每个键的索引映射的功能,或者是否有更惯用的方法来编写这个片段?

    1 回复  |  直到 10 年前
        1
  •  3
  •   Bohemian    10 年前

    集合没有顺序,因此集合中元素的“索引”是任意的(尽管是唯一的)。“索引”只是地图的当前大小,因此您可以使用结果地图的状态来提供索引:

    Map<String, Integer> keysToIndex = new HashMap<>();
    hashMap.keySet().forEach(k -> keysToIndex.put(k, keysToIndex.size()));
    

    这或多或少是您的代码所做的,但更紧凑,因为不需要额外的变量或指令。

    顺便说一句,您可以使用 forEach() 直接在源映射上(并忽略 BiConsumer ):

    Map<String, Integer> keysToIndex = new HashMap<>();
    hashMap.forEach((k, v) -> keysToIndex.put(k, keysToIndex.size()));