java的list的几种排序写法整理(sort的用法)

来源:互联网 发布:js div左右滑动切换 编辑:程序博客网 时间:2024/05/16 10:42

java的实体bean结构

import java.util.ArrayList;import java.util.List;public class Human {    private String name;    private int age;    public Human() {    }    public Human(String name, int age) {        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    @SuppressWarnings("serial")    public static List<Human> getAInitHumanList() {        return new ArrayList<Human>() {            {                add(new Human("guorao", 10));                add(new Human("mako", 12));                add(new Human("hel", 30));                add(new Human("lin", 28));            }        };    }    @Override    public String toString() {        return this.getName() + ":" + this.getAge();    }}

第一种:实现Comparator接口的类的对象作为sort的入参
public class HumanComparetor implements Comparator<Human> {    @Override    public int compare(Human h1, Human h2) {        if (h1.getAge() > h2.getAge()) {            return 1;        } else if (h1.getAge() == h2.getAge()) {            return 0;        } else {            return -1;        }    }}
    public static void main(String[] args) {        List<Human> humans = Human.getAInitHumanList();        Collections.sort(humans, new HumanComparetor());        System.out.println(humans);    }
第二种:在方法的局部使用局部类,原理和第一种差不多
    public static void main(String[] args) {        List<Human> humans = Human.getAInitHumanList();        //方法内-局部类        class HumanComparetor implements Comparator<Human> {            @Override            public int compare(Human h1, Human h2) {                return h1.getAge() - h2.getAge();            }        }        Collections.sort(humans, new HumanComparetor());        System.out.println(humans);    }

第三种:基于第二种方法,局部类改为匿名类
    public static void main(String[] args) {        List<Human> humans = Human.getAInitHumanList();        //匿名类        Collections.sort(humans, new Comparator<Human>() {            @Override            public int compare(Human h1, Human h2) {                return h1.getAge() - h2.getAge();            }        });        System.out.println(humans);    }

第四种:使用lamdba表达式->这种形式
    public static void main(String[] args) {        List<Human> humans = Human.getAInitHumanList();        //lamdba 表达式 ->        Collections.sort(humans, (Human h1, Human h2) -> h1.getAge() - h2.getAge());        System.out.println(humans);    }
第五种:借助Comparator和lamdba表达式多条件排序
    public static void main(String[] args) {        List<Human> humans = Human.getAInitHumanList();        ////lamdba 表达式 ::        Collections.sort(humans, Comparator.comparing(Human::getAge).thenComparing(Human::getName));        System.out.println(humans);    }
第六种:调用方式和第五种有区别,原理一样
    public static void main(String[] args) {        List<Human> humans = Human.getAInitHumanList();        //直接用list.sort        humans.sort(Comparator.comparing(Human::getAge).thenComparing(Human::getName));        System.out.println(humans);    }





原创粉丝点击