Java 8 List <T>到Map <T,(index)>

Dan*_*ári 1 java lambda java-8 java-stream

是否有一种方便的Java8流API方式从List<T> to Map<T, (index)>以下示例进行转换:

    List<Character> charList = "ABCDE".chars().mapToObj(e->(char)e).collect(Collectors.toList());

    Map<Character, Integer> map = new HashMap<>();
    for (int i = 0; i < charList.size(); i++) {
        map.put(charList.get(i), i);
    }
Run Code Online (Sandbox Code Playgroud)

映射= {A = 0,B = 1,C = 2,D = 3,E = 4}

JB *_*zet 5

您可以使用以下令人讨厌的技巧,但它并不优雅,并且在链接列表上根本没有效率:

List<String> list = Arrays.asList("a", "b", "c");
Map<String, Integer> result = 
    IntStream.range(0, list.size())
             .boxed()
             .collect(Collectors.toMap(list::get, Function.identity()));
Run Code Online (Sandbox Code Playgroud)

它也比简单的for循环IMO的可读性差。所以我会坚持下去。

  • 抱歉,还不够清楚。List &lt;String&gt;不相关。您可以在任何种类的任何列表上执行此操作。我的答案仅集中于如何将列表转换为地图。不在字符串字符上。 (2认同)