从流中收集到多重映射中

Jee*_*ppp 7 java guava java-8 java-stream

我有一个短语,我在空白处进行分割并创建一个地图来保存该单词和该单词的索引位置。

我工作得很好。但问题是当短语包含重复的单词时。 com.google.common.collect.Multimap所以我想在Google Guava中使用。

有没有办法使用下面的流收集器生成多重贴图?

List<String> words = new ArrayList<>(Arrays.asList(phrase.split("\\s+")));
Map<String, Integer> tokenMap = IntStream.range(0, words.size())
            .boxed()
            .collect(Collectors.toMap(words::get, i -> i));
Run Code Online (Sandbox Code Playgroud)

Sam*_*ipp 5

你可以使用这个:

List<String> words = Arrays.asList("a b c d e a b c".split("\\s+"));
Multimap<String, Integer> tokenMap = IntStream.range(0, words.size()).boxed()
        .collect(ArrayListMultimap::create, (m, i) -> m.put(words.get(i), i), Multimap::putAll);
Run Code Online (Sandbox Code Playgroud)

结果将是:

{a=[0, 5], b=[1, 6], c=[2, 7], d=[3], e=[4]}
Run Code Online (Sandbox Code Playgroud)