JAvaのlistのいくつかの並べ替えの書き方整理(sortの使い方)

3624 ワード

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 getAInitHumanList() {
        return new ArrayList() {
            {
                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();
    }
}

1つ目:Comparatorインタフェースを実装するクラスのオブジェクトをsortのパラメータとして使用する
public class HumanComparetor implements Comparator {
    @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 humans = Human.getAInitHumanList();
        Collections.sort(humans, new HumanComparetor());
        System.out.println(humans);
    }

2つ目:方法の局所的に局所クラスを使用し、原理と1つ目の差は多くない.
    public static void main(String[] args) {
        List humans = Human.getAInitHumanList();
        //   -   
        class HumanComparetor implements Comparator {
            @Override
            public int compare(Human h1, Human h2) {
                return h1.getAge() - h2.getAge();
            }
        }
        Collections.sort(humans, new HumanComparetor());
        System.out.println(humans);
    }

3つ目:2つ目の方法に基づいて、局所クラスを匿名クラスに変更する
    public static void main(String[] args) {
        List humans = Human.getAInitHumanList();
        //   
        Collections.sort(humans, new Comparator() {
            @Override
            public int compare(Human h1, Human h2) {
                return h1.getAge() - h2.getAge();
            }
        });
        System.out.println(humans);
    }

4つ目:lamdba式を使用する->この形式
    public static void main(String[] args) {
        List humans = Human.getAInitHumanList();
        //lamdba     ->
        Collections.sort(humans, (Human h1, Human h2) -> h1.getAge() - h2.getAge());
        System.out.println(humans);
    }

5つ目:Comparatorとlamdba式による多条件ソート
    public static void main(String[] args) {
        List humans = Human.getAInitHumanList();
        ////lamdba     ::
        Collections.sort(humans, Comparator.comparing(Human::getAge).thenComparing(Human::getName));
        System.out.println(humans);
    }

6つ目:呼び出し方式と5つ目に違いがあり、原理は同じです.
    public static void main(String[] args) {
        List humans = Human.getAInitHumanList();
        //   list.sort
        humans.sort(Comparator.comparing(Human::getAge).thenComparing(Human::getName));
        System.out.println(humans);
    }