如何根据多个属性/字段值将对象数组拆分为子数组?

问题描述 投票:0回答:1

我有一个对象列表。这是对象属性(它们是层次结构)-

学区编号/名称

学校编号/名称

年级 ID/名称

主题 ID/名称

学号/姓名

我已按学区、学校、年级、科目对列表进行排序。所以基本上,列表中具有完全相同的学区、学校、年级和科目的所有项目都将在列表中彼此相邻。

但是如何根据这个条件将列表拆分为子列表呢?每个子列表必须是具有相同学区、学校、年级和科目的对象。我不需要地图或任何其他数据结构 - 我想要一个列表/子列表的列表。

谢谢。

java arraylist collections collectors groupingby
1个回答
0
投票

我们在这里:

package org.example;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class SchoolSubList {
    public static void main(String[] args) {
        List<Element> elements = Arrays.asList(
                new Element("District 1", "School 1", "Grade 1", "Math", "Student 1"),
                new Element("District 1", "School 1", "Grade 1", "Math", "Student 2"),
                new Element("District 1", "School 1", "Grade 1", "Math", "Student 3"),
                new Element("District 1", "School 1", "Grade 1", "Math", "Student 4")
                // and so on

        );

        List<List<Element>> listOfList = elements.stream()
                .collect(Collectors.groupingBy(ElementKey::new, Collectors.toList()))
                .values().stream()
                .toList();
    }
    record ElementKey(String district, String school, String grade){
        public ElementKey(Element element) {
            this(element.district(), element.school(), element.grade());
        }
    }
    record Element(String district, String school, String grade, String subject, String student) { }
}
© www.soinside.com 2019 - 2024. All rights reserved.