public static Stream<Cell> streamCells(int rows, int cols) {
return IntStream.range(0, rows).mapToObj(row -> IntStream.range(0, cols).mapToObj(col -> new Cell(row, col)));
}
我正在使用Eclipse。 eclipse给出了以下错误。
Type mismatch: cannot convert from Stream<Object> to Stream<ProcessArray.Cell>
答案 0 :(得分:2)
@ flo的替代解决方案
public static Stream<Cell> streamCells(int rows, int cols) {
return IntStream.range(0, rows).boxed()
.flatMap(row -> IntStream.range(0, cols).mapToObj(col -> new Cell(row, col)));
}
答案 1 :(得分:1)
@ flo的答案,改为使用flatMap(flatMap“嵌入”由flatMapping函数返回的Stream到原始流中):
return IntStream.range(0, rows)
.mapToObj(row -> IntStream.range(0, cols)
.mapToObj(col -> new Cell(row, col))
) // int -> Stream<Cell>
.flatmap(Function.identity()) // Stream<Cell> -> Cell
;
答案 2 :(得分:0)
您的代码映射到Streams流。将其分为声明和返回提供以下代码:
Stream<Stream<Cell>> mapToObj = IntStream.range(0, rows).mapToObj(row -> IntStream.range(0, cols).mapToObj(col -> new Cell(row, col)));
return mapToObj;
您需要将Streams缩减为单个Stream:
// CAVE: poor performance
return IntStream.range(0, rows)
.mapToObj(row -> IntStream.range(0, cols).mapToObj(col -> new Cell(row, col)))
.reduce(Stream.empty(), Stream::concat);
编辑正如Holger在评论中指出的那样,使用Stream.concat()减少Streams流并不是非常高效。使用flatMap
方法而不是reduce
使用其他解决方案之一。