为了账号安全,请及时绑定邮箱和手机立即绑定

从流中收集到多图

从流中收集到多图

慕虎7371278 2022-11-02 15:38:50
我有一个短语,我在空白处分割并创建一个地图来保存单词和单词的索引位置。我工作得很好。但问题是当短语包含重复的单词时。所以我想用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));
查看完整描述

2 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

你可以使用这个:


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);

结果将是:


{a=[0, 5], b=[1, 6], c=[2, 7], d=[3], e=[4]}


查看完整回答
反对 回复 2022-11-02
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

Stream.collect()是一个非常通用的 API,所以没有什么特别的原因不能收集到Multimap. 但是没有一个变体Collectors.toMap()可以支持这一点,因为 acom.google.common.collect.Multimap不是 a java.util.Map

我不知道现有的Collector实现可以完成这项工作,但肯定可以通过直接实现Collector.


查看完整回答
反对 回复 2022-11-02
  • 2 回答
  • 0 关注
  • 93 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信