LoginSignup
3
4

More than 5 years have passed since last update.

Java8 ラムダ式でComparatorのコールバック関数を簡単に書く方法

Last updated at Posted at 2016-03-26

今さらながらJava8の新機能で遊んでみる

普段仕事ではJava7を使っており、Java8の新機能を少し触ってみたら楽しかったので少しづつ書き残していきたいと思います。

まず、今まで鬱陶しいと思っていたComparatorクラス

Personオブジェクトのリストを年齢順で並び替えたいと思います。

Java7以前は以下のような書き方でした。

Java7.java
Collections.sort(list, new Comparator<Person>(){
    @Override
    public int compare(Person p1, Person p2) {
        return p1.getAge() - p2.getAge();
    }
);

それがJava8のラムダ式を使えば以下のように書けるようになりました。

Java8.java
Collections.sort(list, (p1, p2) -> p1.getAge() - p2.getAge());

次にID、名前、年齢の順でソートしてみたいと思います。

Java7.java
Collections.sort(list, new Comparator<Person>(){
    @Override
    public int compare(Person p1, Person p2) {
        int ret = p1.getId() - p2.getId();
        if (ret == 0) {
            ret = p1.getName().compareTo(p2.getName());
        }
        if (ret == 0) {
            ret = p1.getAge() - p2.getAge();
        }
        return ret;
    }       
});

つづきましてJava8ラムダ式を用いた方法です。

Java8.java
Collections.sort(list, (p1, p2) -> {
    int ret = Integer.compare(p1.getId(), p2.getId());
    if (ret == 0) {
        ret = p1.getName().compareTo(p2.getName();
    }    
    if (ret == 0) {
        ret = Integer.compare(p1.getAge(), p2.getAge());
    }
    return ret;
});

ラムダ式に対して賛否両論ありますが、非常に短く書けるようになり個人的にはわかりやすいと思います。

Stream APIについても後々書きたいと思います。

お読みいただきありがとうございました。

3
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4