hec*_* s. 5 java sorting list comparator java-8
我有以下列表:
List<String> fruits = new ArrayList<String>(Arrays.asList("Apple", "Banana", "Orange", "Watermelon", "Peach"));
Run Code Online (Sandbox Code Playgroud)
我需要在这个条件下订购它:
结果应该是:
Orange, Watermelon, Apple, Banana, Peach
Run Code Online (Sandbox Code Playgroud)
我怎么能用Java 8做到这一点?
Pet*_*rey 13
您可以使用比较器链.
List<String> fruits = new ArrayList<>(Arrays.asList(
"Apple", "Banana", "Orange", "Watermelon", "Peach"));
fruits.sort(Comparator.comparing((String s) -> !s.contains("O") && !s.contains("o"))
.thenComparing(Comparator.naturalOrder()));
System.out.println(fruits.stream().collect(Collectors.joining(", ")));
Run Code Online (Sandbox Code Playgroud)
第一个比较器查看字符串是否包含O,使得首先执行的操作,第二个比较器使用自然顺序.
注意:Boolean.TRUE.compareTo(Boolean.FALSE) > 0所以为了使包含O的字符串先进行,我将其翻转为!
这打印
Orange, Watermelon, Apple, Banana, Peach
Run Code Online (Sandbox Code Playgroud)
注意:在这种情况下,new ArrayList<>( ... )不需要,因为sort不会更改元素的数量,只需重新排列它们.
编辑:基于@Holger的建议.
如果优选稳定的排序,即尽可能保持订单.
List<String> fruits = Arrays.asList(
"Watermelon", "Peach", "Orange", "Banana", "Apple");
fruits.sort(Comparator.comparing((String s) -> !s.contains("O") && !s.contains("o")));
System.out.println(fruits.stream().collect(Collectors.joining(", ")));
Run Code Online (Sandbox Code Playgroud)
版画
Watermelon, Orange, Peach, Banana, Apple
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |