如何遍历 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
当然,按照上面的做法,坐标来源(即个别船只)的来源标识丢失了。
标题听起来有点乱,但我觉得我的问题简单多了。
这是我的:
// 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
当然,按照上面的做法,坐标来源(即个别船只)的来源标识丢失了。