我打算利用我的程序中使用並行數據流的好處,我想,以取代這樣一個循環:如何從java 8中的雙重嵌套地圖中收集對象?
for (int gridY = gridYFrom; gridY <= gridYTo; gridY++) {
for (int gridX = gridXFrom; gridX <= gridXTo; gridX++) {
coordinates.add(Coordinate.from(gridX, gridY));
}
}
像這樣的東西:
IntStream.rangeClosed(gridYFrom, gridYTo).parallel().map(y ->
IntStream.rangeClosed(gridXFrom, gridXTo).mapToObj(x -> {
return Coordinate.from(x, y);
}
)).collect(Collectors.toSet());
我的問題是,這裏我得到一個cyclic inference
錯誤。我知道我應該從內部映射返回一個int
以與外部映射兼容,但我想返回一個Coordinate
對象(因此調用mapToObj
)。是否有可能使用collect
並且不使用forEach
構造?
太好了,謝謝!我發現我需要收集兩次,但其他'mapToObj'仍然是一個問題。 –
請檢查我的編輯。我完全忘了'Stream :: sequential'。 –
爲什麼使用'Stream :: sequential'作爲平面映射內部流的函數?只需使用'flatMap(s - > s)'。 –