Java Streams列表将映射的索引映射为键

jis*_*ist 2 java grouping java-8 java-stream

假设我有一个字符串列表

["bird", "bird", "dog", "dog", "bird","bog"]
Run Code Online (Sandbox Code Playgroud)

我希望它们以形式收集为地图

{"bird": [0, 1, 4], "dog": [2, 3, 5]}
Run Code Online (Sandbox Code Playgroud)

作为列表值是单词在输入列表中的索引.

有没有办法用Java Streams做到这一点?

Jac*_* G. 15

是的,你可以使用IntStream连同Collectors.groupingBy:

List<String> list = List.of("bird", "bird", "dog", "dog", "bird", "bog");

IntStream.range(0, list.size())
         .boxed()
         .collect(Collectors.groupingBy(list::get));
Run Code Online (Sandbox Code Playgroud)

输出:

{bird=[0, 1, 4], bog=[5], dog=[2, 3]}
Run Code Online (Sandbox Code Playgroud)