【发布时间】:2017-07-20 19:23:47
【问题描述】:
我有一个形状流
Stream<Shape> shapes = Arrays.asList(TRIANGLE, CIRCLE, SQUARE, SQUARE, CIRCLE, TRIANGLE, TRIANGLE).stream();
Shape 在哪里
public enum Shape {TRIANGLE, CIRCLE, SQUARE}
如何编写将形状流分组为
Map<Shape, List<Integer>> 这样按形状收集索引?
public Map<Shape, List<Integer>> indexedPartition(Stream<Shape> shapes) {
//code here
}
在函数 indexedPartition 的当前示例输出中看起来像
TRIANGE -> {0, 5, 6}
CIRCLE -> {1, 4}
SQUARE -> {2, 3}
在 Scala 中我会做类似的事情
val indices = Stream.from(0)
object Shape extends Enumeration {
type Shape = Value
val CIRCLE, TRIANGLE, SQUARE = Value
}
val shapes = Stream(Shape.TRIANGLE, Shape.CIRCLE, Shape.SQUARE, Shape.SQUARE, Shape.CIRCLE, Shape.TRIANGLE, Shape.TRIANGLE)
(shapes zip indices).groupBy{ case (s, i) => s }.mapValues(l => l.map(_._2))
//res0: scala.collection.immutable.Map[Shape.Value,List[Int]] = Map(SQUARE -> List(2, 3), TRIANGLE -> List(0, 5, 6), CIRCLE -> List(1, 4))
我尝试在 java 中使用 Collectors.groupingBy,但我无法理解它。
【问题讨论】:
标签: scala java-8 collectors