今さらながら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についても後々書きたいと思います。
お読みいただきありがとうございました。