gpt4 book ai didi

java - 如何在java中对嵌套列表进行排序

转载 作者:行者123 更新时间:2023-12-02 11:41:20 25 4
gpt4 key购买 nike

我有一个如下所示的 json :

{ 
"Student": [
{
"name":"5",
"Roll No":12345,
"Subjects":[
{
"subjectCode":"Mat"
},
{
"subjectCode":"Sci"
}
]
}
]
}

我想对每个学生的科目列表进行排序,然后用卷号对学生对象进行排序。可以用 java8 在单行中完成吗?

我正在使用以下代码:

list.forEach(studentObj -> {
studentObj.getSubjects()
.sort(Comparator.nullsLast(Comparator.comparing(Subject:: getSubjectCode)));
});

然后对外部对象进行排序

  list.sort(Comparator.nullsLast(Comparator.comparing(Student:: getRollNo)));

最佳答案

如果您要实现 Comparable interface与您的 2 堂课 StudentSubject你可以让它变得非常漂亮和简短,因为你可以使用 Comparator.naturalOrder()静态工厂方法

它还允许您更改定义方式 SubjectsStudents只需更改其 compareTo 即可订购方法

学生

class Student implements Comparable<Student> {
String name;
int rollNo;
List<Subject> subjects = new ArrayList<>();

// GETTERS/SETTERS

@Override
public int compareTo(Student student) {
return Integer.compare(this.getRollNo(), student.getRollNo());
}

}

主题

class Subject implements Comparable<Subject> {
String subjectCode;

// GETTERS/SETTERS

@Override
public int compareTo(Subject subject) {
return this.getSubjectCode().compareTo(subject.getSubjectCode());
}

}

然后

// static import to make code lighter
import static java.util.Comparator.*;

// sort Students list, then sort Subjects list in each Student
list.sort(nullsLast(naturalOrder()));
list.forEach(s -> { if (s != null) {
s.getSubjects().sort(nullsLast(naturalOrder()));
}});

单衬版本(如果您确实需要)

List<Student> sortedList = list.stream()
.map(s -> {
if (s != null) {
s.getSubjects().sort(nullsLast(naturalOrder()));
}
return s;
}).sorted(nullsLast(naturalOrder()))
.collect(Collectors.toList());

关于java - 如何在java中对嵌套列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54106907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com