初始化集合数据:
List<Employee> employees = new ArrayList<>();
{
employees.add(new Employee(1, "张三", 20, 8895.31));
employees.add(new Employee(2, "张四", 28, 7894.34));
employees.add(new Employee(3, "张柳", 46, 6895.37));
employees.add(new Employee(66, "王一", 54, 5895.5));
employees.add(new Employee(56, "李四", 55, 4895.8));
employees.add(new Employee(89, "李十一", 32, 9895.354));
employees.add(new Employee(546, "张十五", 20, 18895.37));
employees.add(new Employee(43, "刘十六", 43, 28895.35));
employees.add(new Employee(66, "刘十六", 43, 28895.35));
}
1. sorted
自然排序方法
/**
* 测试sorted()方法 自然排序
*/
@Test
public void testStreamSorted() {
List<Integer> list = Arrays.asList(1,2,35,4,5);
list.stream()
.sorted()
.forEach(System.out::println);
}
2. sorted(Comparator c)
定制排序方法
/**
* 测试sorted(Comparator c)方法 定制排序。
* 按照年龄排序,年龄相同的按照工资排序,工资也相同的就按照index排序。
*/
@Test
public void testStreamSortedComparator() {
employees.stream().sorted((employee1,employee2)->{
if (employee1.getAge().equals(employee2.getAge())){
//年龄相同,工资也相同,就比较index编号
if (employee1.getSalary().compareTo(employee2.getSalary()) == 0){
return employee1.getIndex().compareTo(employee2.getIndex());
}
return employee1.getSalary().compareTo(employee2.getSalary());
}
//按照年龄排序,年龄相同的就比较工资
return employee1.getAge().compareTo(employee2.getAge());
}).forEach(System.out::println);
}
3. 按照对象的某个属性排序
/**
* 测试sorted(Comparator c)方法 定制排序。
* 按照一个维度排序
* eg:按照工资排序
*/
@Test
public void testStreamComparator() {
employees.stream().sorted(Comparator.comparing(Employee::getSalary)).forEach(System.out::println);
}