java8的stream用于排序

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;


public class Person {
    private int id;
    private int age;
    private int wage; //工资
    private String name;
   
    public Person(int id, String name, int age,int wage) {
        this.id = id;
        this.age = age;
        this.wage = wage;
        this.name = name;
    }
  
    public Person() {
    }
    
    public int getId() {
		return id;
	}

	
	public void setId(int id) {
		this.id = id;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getWage() {
		return wage;
	}

	public void setWage(int wage) {
		this.wage = wage;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	
	@Override
	public String toString() {
		return "Person [id=" + id + ", age=" + age + ", wage=" + wage + ", name=" + name + "]"+"\n";
	}
  
	
	public static void main(String[] args) {
        Person p1 = new Person(0, "p0",12,200);
        Person p2 = new Person(1, "p1",12,300);
        Person p3 = new Person(1, "p2",12,200);
        Person p4 = new Person(3, "p3",12,200);
        Person p5 = new Person(3, "p4",12,201);
        Person p6 = new Person(3, "p5",11,200);

        List<Person> personList = new ArrayList<>();
        personList.add(p1);
        personList.add(p2);
        personList.add(p3);
        personList.add(p4);
        personList.add(p5);
        personList.add(p6);
        //按id从大到小排序(注意p.getId前加了负号)
        //Function<Person, Integer> comparingById = p -> -p.getId();
        //按id从小到大排序
        Function<Person, Integer> comparingById = p -> p.getId();
        //按Age从大到小排序
        Function<Person, Integer> comparingByAge = p -> -p.getAge();
       //依次多条件比较:id(小到大)->age(大到小)->wage(大到小)
        personList = personList.stream()
        		.sorted(
        		    Comparator.comparing(comparingById) //
        		    .thenComparing(comparingByAge) // .thenComparing(Person::getAge)
        		    //自定义工资比较,大->小
        		    .thenComparing((p->p),new Comparator<Person>() {
						@Override
						public int compare(Person o1, Person o2) {
							if(o1.getWage() == o2.getWage()) {
								return 0;
							}else if(o1.getWage() < o2.getWage()) {
								return 1;
							}else {
								return -1;
							}	
						}
        		    })
        		)
        		.collect(Collectors.toList());
        
        System.out.println(personList);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值