Anu*_*oni 7 java sorting collections java-8
我有一个像下面这样的json:
{
"Student": [
{
"name":"5",
"Roll No":12345,
"Subjects":[
{
"subjectCode":"Mat"
},
{
"subjectCode":"Sci"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想对每个学生中的主题列表进行排序,然后用滚动号排序学生对象.可以用单行java8完成.
我使用下面的代码:
list.forEach(studentObj -> {
studentObj.getSubjects()
.sort(Comparator.nullsLast(Comparator.comparing(Subject:: getSubjectCode)));
});
Run Code Online (Sandbox Code Playgroud)
然后排序外部对象
list.sort(Comparator.nullsLast(Comparator.comparing(Student:: getRollNo)));
Run Code Online (Sandbox Code Playgroud)
如果您要使用2 个类实现Comparable 接口Student
,并且Subject
可以使其变得非常漂亮和简短,因为您可以使用Comparator.naturalOrder()静态工厂方法
它还允许您通过简单地更改其方法来更改定义方式Subjects
或Students
订购方式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());
}
}
Run Code Online (Sandbox Code Playgroud)
主题
class Subject implements Comparable<Subject> {
String subjectCode;
// GETTERS/SETTERS
@Override
public int compareTo(Subject subject) {
return this.getSubjectCode().compareTo(subject.getSubjectCode());
}
}
Run Code Online (Sandbox Code Playgroud)
进而
// 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()));
}});
Run Code Online (Sandbox Code Playgroud)
如果您确实需要,可提供一款内衬版本
List<Student> sortedList = list.stream()
.map(s -> {
if (s != null) {
s.getSubjects().sort(nullsLast(naturalOrder()));
}
return s;
}).sorted(nullsLast(naturalOrder()))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
这里有一些单行示例,可以帮助您开始使用 java 流。
List<String> sorted = new ArrayList<>(Arrays.asList("Input1", "Input2", "Etc")).stream().sorted((a, b) -> a.compareTo(b));
List<String> sorted = json.stream().sorted((a, b) -> a.compareTo(b));
List<String> sorted = json.stream().sorted();
Run Code Online (Sandbox Code Playgroud)
以下是如何对列表中的所有列表进行排序,因此您现在可以重构以使其成为单行
void method() {
sort(list);
}
void sort(List list) {
if (list.size() == 0)
return;
list.stream().sorted();
for (Object o : list)
if (o instanceof List)
sorted((List) o);
}
Run Code Online (Sandbox Code Playgroud)
以下是对 java 流的一些参考:
API 文档:
https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html
例子:
https://stackify.com/streams-guide-java-8/
https://www.geeksforgeeks.org/stream-in-java/
归档时间: |
|
查看次数: |
926 次 |
最近记录: |