Javaはオブジェクトのフィールドに従って並べ替えられます。

4357 ワード

ちょうど最近のプロジェクト開発では、Listに保存されているオブジェクトをそのフィールドに従って並べ替える必要があるので、まとめてみましょう。コードの運搬員としても、その原理を理解する必要があります。
簡単なPersonクラスをください。
public class Person {
    private Long id;

    private String name;

    public Person(Long id, String name) {
        this.id = id;
        this.name = name;
    }

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}
今の需要は名前のピンインの頭文字によって並べ替えて、コードを見て実現します。
 @Test
    public void testSort() {
        Person p1 = new Person(1l, "   ");
        Person p2 = new Person(3l, "   ");
        Person p3 = new Person(2l, "   ");
        Person p4 = new Person(4l, "  ");
        Person p5 = new Person(5l, "   ");

        List persons = Arrays.asList(p1, p2, p3, p4, p5);

        Collections.sort(persons, new Comparator() {
            @Override
            public int compare(Person o1, Person o2) {
                Collator collator = Collator.getInstance(Locale.CHINA);
                return collator.compare(o1.getName(), o2.getName());
            }
        });

    }
Collections.sort方法を使って、Comprator実現類を伝え、比較対象フィールドでcompre方法を実現します。
いずれにしても、私はラダの書き方が好きです。
    Collections.sort(persons, (o1, o2) -> {
         Collator collator = Collator.getInstance(Locale.CHINA);
         return collator.compare(o1.getName(), o2.getName());
     });

// another way
persons.sort((p1, p2) -> p1.getName.compareTo(p2.getName));
Javaの対象順位はいずれもComparable Comparatorという二つのインターフェースと関連しています。ネット上ではすでに多くの文章が記述されています。添付の文章を見に行きましょう。:http://www.journaldev.com/780/comparable-and-comparator-in-java-example http://www.importnew.com/15259.html https://sanaulla.info/2013/03/11/using-lambda-expression-to-sort-a-list-in-java-8-using-netbeans-lambda-support/