我有形状收集指数
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尝试,但我可以我的头围绕着它。
你可以请编辑您的'流 shapes'答案吗? –
@ApoorvIngle你不能做'流' - 因为它没有索引 – Eugene
@Eugene如何使用'Streams.zip'或类似的构造来创建一个元组,然后按照我已经演示的那样收集它我的Scala片段。或者我的Java Collectors.collect概念是完全错误的? –