java - 如何使用流获取嵌套集合中的所有元素

标签 java java-stream

我有一个包含不同嵌套集合的类,现在我想接收嵌套集合的所有元素,具体我想收集集合的所有 StrokePoints。我可以用“旧”java 来解决它,但是如何用流来解决它呢?

    int strokesCounter = 0;
    List<StrokePoint> pointList = new ArrayList<>();
    if (!strokesData.getListOfSessions().isEmpty()) {
        for (SessionStrokes session : strokesData.getListOfSessions()) {
            List<Strokes> strokes = session.getListOfStrokes();
            for (Strokes stroke : strokes) {
                strokesCounter++;
                List<StrokePoint> points = stroke.getListOfStrokePoints();
                pointList.addAll(stroke.getListOfStrokePoints());        
            }
        }
    }

我正在寻找一种用流功能填充 pointList 的方法。

最佳答案

展平嵌套数据非常简单:

List<StrokePoint> pointList = strokesData.getListOfSessions()
        .streams()
        .map(SessionStrokes::getListOfStrokes)
        .flatMap(List::stream)
        .map(Strokes::getListOfStrokePoints)
        .flatMap(List::stream)
        .collect(Collectors.toList());

沿途收集笔划数比较棘手,而且有些争议。您可以创建一个

AtomicInteger strokesCounter = new AtomicInteger();

并在第一个 flatMap 之后递增它:

.peek(strokesCounter::incrementAndGet)

关于java - 如何使用流获取嵌套集合中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56402684/

相关文章:

list - 从嵌套列表中提取有序(根据值)集合,基于列表的最后一项,Java

java - 使用 map 中的值过滤 pojo 流

java8 Collectors.toMap() 限制?

java - 为什么在尝试对 ResultSet 中检索到的列的值求和时出现错误?

java - 带过滤器的IntStream迭代函数

java - java中获取图像的名称

java - 在java中向后排列数组

java - 如何使用stream#sorted()按Java 8中两个字段的乘积进行排序

java - 在不使用弃用代码的情况下从 YMD HMS 值创建 Java 日期

java - 使用 POI 创建 Excel 工作簿时有哪些(陷阱和)限制?