如何遍历 Objects 的列表并将特定值合并到一个大列表

How to traverse a List of Objects and merge specific value to one big list

标题听起来有点乱,但我觉得我的问题简单多了。

这是我的:

// a List containing `Boat` objects
private final List<Boat> placedBoats;

// each Boat contains a List<Coordinate> which represents a position on a grid
public List<Coordinate> getPosition() {
    return positions;
}

有没有一种方法可以使用流 API 将所有 List<Coordinate> 合并为一个大 List<Coordinate>

可能的解决方案:

List<Coordinate> placedBoatCoordinates = new ArrayList<>();
for (Boat boat : placedBoats) {
    placedBoatCoordinates.addAll(boat.getPosition());
}

是的。你可以这样做。

  • 你在船上航行。
  • 由于每艘船都有一个坐标列表,您必须将它们拼合到一个公共流中
  • 然后将坐标收集到列表中。
List<Boat> placedBoats ...;
List<Coordinates> coordinates = placedBoats.stream()
           .flatMap(boat->boat.getCoordinates().stream())
           .toList(); // or .collect(Collectors.toList()) if pre java-16

当然,按照上面的做法,坐标来源(即个别船只)的来源标识丢失了。