- 一:對整數進行排序
-
List<Integer> numbers =Arrays.asList(6,2,1,4,9); -
System.out.println(numbers);//[6, 2, 1, 4, 9] -
numbers.sort(Comparator.naturalOrder()); -
System.out.println(numbers);//[1, 2, 4, 6, 9] - 二、按字符串字段對列表進行排序
-
-
List<Movie> movies =Arrays.asList( -
newMovie("Lord of the rings"), -
newMovie("Back to the future"), -
newMovie("Carlito's way"), -
newMovie("Pulp fiction")); -
movies.sort(Comparator.comparing(Movie::getTitle)); -
movies.forEach(System.out::println); - 提取的類型是String,而String實現了
Comparable接口,所以list能正確排序。 -
三、按double字段排序列表 -
List<Movie> movies =Arrays.asList( -
newMovie("Lord of the rings",8.8), -
newMovie("Back to the future",8.5), -
newMovie("Carlito's way",7.9), -
newMovie("Pulp fiction",8.9)); -
movies.sort(Comparator.comparingDouble(Movie::getRating) -
.reversed()); -
movies.forEach(System.out::println); - 我們使用反轉函數(
reversed)來反轉默認從低到高的自然排序,Comparator.comparingDouble()底層使用Double.compare()實現。如果需要比較int或long,可以分別使用comparisonInt()和comparisonLong()。 - 四、使用自定義比較器多列表進行排序
-
-
List<Movie> movies =Arrays.asList( -
newMovie("Lord of the rings",8.8,true), -
newMovie("Back to the future",8.5,false), -
newMovie("Carlito's way",7.9,true), -
newMovie("Pulp fiction",8.9,false)); -
movies.sort(newComparator<Movie>(){ -
@Override -
publicint compare(Movie m1,Movie m2){ -
if(m1.getStarred()== m2.getStarred()){ -
return0; -
} -
return m1.getStarred()?-1:1; -
} -
}); - 我們可以使用
lambda表達式而不是匿名類(Anonymousclass),如下所示: -
movies.forEach(System.out::println); -
-
movies.sort((m1, m2)->{ -
if(m1.getStarred()== m2.getStarred()){ -
return0; -
} -
return m1.getStarred()?-1:1; -
}); - 也可以使用
Comparator.comparing(): -
-
movies.sort(Comparator.comparing(Movie::getStarred,(star1, star2)->{ -
if(star1 == star2){ -
return0; -
} -
return star1 ?-1:1; -
}));
-
-
-
-
-
List<Integer> numbers =Arrays.asList(6,2,1,4,9); -
System.out.println(numbers);//[6, 2, 1, 4, 9] -
numbers.sort(Comparator.naturalOrder()); -
System.out.println(numbers);//[1, 2, 4, 6, 9]
原文鏈接:https://dzone.com/articles/java-8-comparator-how-to-sort-a-list
作者: Mario Pio Gioiosa
譯者:Steephan
