【发布时间】:2021-01-21 15:41:20
【问题描述】:
如何将Stream 的项目收集到MultivaluedMap 中?内置的 Java Map 收集器不能很好地用于此目的,因为它们希望对映射的列表类型 (K,List<V>) 进行操作,而不是 MultivaluedMap (<K,V>) 的类型。
【问题讨论】:
-
关于书籍、工具、软件库等的建议的问题与 Stack Overflow 无关,抱歉。 stackoverflow.com/help/on-topic
-
@ra74 — 如前所述,您的问题很容易被视为软件推荐问题。我认为除此之外这是一个非常有效的问题,并且可以很容易地转换为一个不太可能因此而关闭的问题。我冒昧地对帖子进行了相应的编辑。
-
如果这个被重新打开,我会添加这个作为一个正确的答案。一种解决方法,但一种解决方案是将现有的收集器用于不同的多图类型(这里是 Guava 的
Multimap),然后将其转换为MultivalueMap。就是这样一个收藏家:Collectors.collectingAndThen(Multimaps.toMultimap(keyFunction, valueFunction, ArrayListMultimap::create),m -> {MultivaluedHashMap<String, Integer> result = new MultivaluedHashMap<>();result.putAll(Multimaps.asMap(m));return;}); -
如果这个被重新打开,我会添加这个作为一个正确的答案。这将使用
java.util.Stream库完成您想要做的事情:Collector.of(MultivaluedHashMap::new,(multimap, input) -> multimap.add(keyFunction.apply(input), valueFunction.apply(input)),(multimap1, multimap2) -> {multimap1.putAll(multimap2);return multimap1;}); -
@M.Justin 此问题现已重新开放。
标签: java java-stream jax-rs