【发布时间】:2014-04-08 18:09:08
【问题描述】:
我有一个Stream<T>,是否可以生成一个Map<T, Long>,为每个元素增加一个计数?我还想知道它是否可以将T, Long 反转为Long, T,然后将其存储在Map 中,例如输入/输出:
Stream<String>的示例内容:
kgj
def
dgh
第一个问题想要的输出:
(kgj, 1)
(def, 2)
(dgh, 3)
最终想要的输出:
(1, kgj)
(2, def)
(3, dgh)
到目前为止我所拥有的,Stream<VertexData>:
primitives.stream()
.flatMap(primitive -> primitive.getVertexData().stream())
.distinct()
.collect(Collectors.groupingBy(i -> i, Collectors.counting()))
.forEach((k, v) -> System.out.println("k = " + k + " / v = " + v));
目前这会将Stream<Primitive> 转换为具有不同元素的Stream<VertexData>,然后转换为计算出现次数的Map<VertexData, Long>,这不是我想要的,因为我希望它继续计数通过的每个元素。
有没有办法按我的要求做?
【问题讨论】:
-
@assylias 我想说它提供了一种解决方法,并感谢您指导我解决这个问题,但这不是一个确定的答案,因此我认为您为什么将其发布为评论。
-
在使用重复输入(例如 ["abc", "def", "abc"])时,您希望第一个问题的输出是什么?
-
@jpvee 它应该只计算不同的元素,(我已经在 我所拥有的中已经有了),使用流很容易通过 @ 获得稳定的不同元素987654336@.
-
在 scala 中,我只想
x.zipWithIndex和第二个:x.zipWithIndex.map(x => (x._2,x._1))
标签: java mapping java-8 java-stream