代碼部分
利用stream的sorted()
進行實現中文排序和數字排序(包括降序和升序),非常簡單。
package com.chstar.elasticsearchdemo.utils;
import java.text.Collator;
import java.util.*;
import java.util.stream.Collectors;
public class Demo {
static class Student {//只是為了方便演示
private Integer id;
private String name;
private String grade;
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student(Integer id, String name, String grade) {
this.id = id;
this.name = name;
this.grade = grade;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", grade='" + grade + '\'' +
'}';
}
}
public static void main(String[] args) {
//測試數據,可以看到順序是亂的。
List<Student> user = new ArrayList<>();
user.add( new Student(1, "張三","一年級"));
user.add( new Student(4, "李四","三年級"));
user.add( new Student(2, "王五","二年級"));
user.add( new Student(3, "趙六","四年級"));
//按編號升序(默認)
List<Student> collect1 = user.stream().sorted(Comparator.comparingInt(Student::getId)).collect(Collectors.toList());
//遍歷輸出
System.out.println("編號升序");
collect1.forEach(System.out::println);
System.out.println("===========================================================================");
//按年級升序(默認)
List<Student> collect = user.stream()
.sorted((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o1.getGrade(),o2.getGrade())).collect(Collectors.toList());
//遍歷輸出
System.out.println("中文升序");
collect.forEach(System.out::println);
System.out.println("===========================================================================");
//按編號降序
List<Student> collect2 = user.stream().sorted((o1, o2) -> o2.getId() - o1.getId()).collect(Collectors.toList());
//遍歷輸出
System.out.println("編號降序");
collect2.forEach(System.out::println);
System.out.println("===========================================================================");
//按年級降序
List<Student> collect3 =
user.stream().sorted((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o2.getGrade(),o1.getGrade())).collect(Collectors.toList());
//遍歷輸出
System.out.println("中文降序");
collect3.forEach(System.out::println);
}
}
測試結果
可以看到成功:
stream確實好用一行代碼搞定聚合、過濾、排序操作等。