如何使用Java Stream API合并Boat列表中所有Coordinate坐标集合
实现方案
完全可以实现,核心是使用Stream API的flatMap操作完成列表扁平化合并,示例代码如下:
import java.util.List; import java.util.stream.Collectors; // Java 16+ 版本写法 List<Coordinate> allCoordinates = placedBoats.stream() .flatMap(boat -> boat.getPosition().stream()) .toList(); // Java 8 ~ Java 15 兼容写法 List<Coordinate> allCoordinates = placedBoats.stream() .flatMap(boat -> boat.getPosition().stream()) .collect(Collectors.toList());
如果偏好方法引用的写法,也可以调整为:
import java.util.Collection; List<Coordinate> allCoordinates = placedBoats.stream() .map(Boat::getPosition) .flatMap(Collection::stream) .toList();
逻辑说明
flatMap是Stream扁平化操作的核心方法,作用是把原始流中的每一个元素,映射为一个新的子流,再把所有子流拼接为一个完整的总流- 上述代码中,我们先把
placedBoats转为Stream<Boat>,再通过flatMap把每个Boat的坐标集合转成Stream<Coordinate>,自动合并所有子流后,最终收集得到包含所有Boat坐标的总列表
如果后续需要对坐标做去重、过滤等操作,直接在flatMap之后追加对应方法即可,示例:
// 合并坐标且去重 List<Coordinate> distinctCoordinates = placedBoats.stream() .flatMap(boat -> boat.getPosition().stream()) .distinct() .toList();
内容的提问来源于stack exchange,提问作者Beru
相关产品推荐
相关产品推荐

