【发布时间】:2019-04-30 21:31:40
【问题描述】:
我有一个短语,我在空白处分割并创建一个地图来保存单词和单词的索引位置。
我工作得很好。但问题是当短语包含重复的单词时。所以我想用com.google.common.collect.Multimap。
有没有办法使用以下流的收集器生成 Multimap?
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));
【问题讨论】:
-
技术上这也使用收集器:
Multimaps.index(IntStream.range(0, words.size()).boxed().collect(Collectors.toList()), words::get) -
使用
toMap:Collectors.toMap(Function.identity(), words::get)并将result提供给Multimaps.invertFrom(Multimaps.forMap(result), MultimapBuilder.hashKeys().arrayListValues().build())
标签: java java-8 java-stream