Java 8において、Listのソート方法を整理します。
Java 7 and below
Java 7時代のおさらい
List<String> nameList = Arrays.asList("Takahashi", "Tanaka", "Suzuki");
Collections.sort(nameList);
Java 8以降
Java 8以降は、Listにsort(Comparator)が追加され、それを使ってリストをソートすることができます。
nameList.sort(Comparator.comparingInt(String::length));
複数条件(文字列長 -> アルファベットの順)でソートする。
thenComparing()を利用することで、ソート条件を追加できます。
nameList.sort(Comparator.comparingInt(String::length)
.thenComparing(Comparator.naturalOrder()));
また、Streamが導入されることにより、Stream#sortedでリストをソースすることができます。
List<String> sortedList = nameList.stream().sorted()
.collect(Collectors.toList());
Lambdaの利用
文字列長でソートする。
List<String> sortedList = nameList.stream().sorted((s1, s2) -> s1.length() - s2.length())
.collect(Collectors.toList());
アルファベット順でソートする。
List<String> sortedList = nameList.stream().sorted((s1, s2) -> s1.compareTo(s2))
.collect(Collectors.toList())
Comparatorの利用
文字列長でソートする。
List<String> sortedList = nameList.stream().sorted(
Comparator.comparingInt(String::length)).collect(Collectors.toList());
アルファベット順でソートする。
List<String> sortedList = nameList.stream().sorted(
Comparator.naturalOrder()).collect(Collectors.toList())
Comparatorで複数条件のソート
文字列長 -> アルファベットの順でソートする。
thenComparing()を利用することで、ソート条件を追加できます。
List<String> sortedList = nameList.stream().sorted(
Comparator.comparingInt(String::length)
.thenComparing(Comparator.naturalOrder())).collect(Collectors.toList());
Comparatorでオブジェクトリストのソート
List<Person> sortedList = personList.stream().sorted(new Comparator<Person>(){
@Override
public int compare(Person o1, Person o2) {
return o1.getName().compareTo(o2.getName());
}
}).collect(Collectors.toList());