按特定字符排序列表 (Java 8)
Ordering List by a specific character (Java 8)
我有以下列表:
List<String> fruits = new ArrayList<String>(Arrays.asList("Apple", "Banana", "Orange", "Watermelon", "Peach"));
我需要在这种情况下订购:
- 首先,包含字符 "o" 或 "O"
的那些
- 然后,剩下的。
结果应该是:
Orange, Watermelon, Apple, Banana, Peach
如何在 Java 8 中完成?
您可以使用比较器链。
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(", ")));
第一个比较器查看字符串是否包含 O,使包含的先出现,第二个比较器使用自然顺序。
注意:Boolean.TRUE.compareTo(Boolean.FALSE) > 0
所以为了使包含 O 的字符串先行,我用 !
翻转它
这会打印
Orange, Watermelon, Apple, Banana, Peach
注意:在这种情况下,不需要 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(", ")));
打印
Watermelon, Orange, Peach, Banana, Apple
我有以下列表:
List<String> fruits = new ArrayList<String>(Arrays.asList("Apple", "Banana", "Orange", "Watermelon", "Peach"));
我需要在这种情况下订购:
- 首先,包含字符 "o" 或 "O" 的那些
- 然后,剩下的。
结果应该是:
Orange, Watermelon, Apple, Banana, Peach
如何在 Java 8 中完成?
您可以使用比较器链。
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(", ")));
第一个比较器查看字符串是否包含 O,使包含的先出现,第二个比较器使用自然顺序。
注意:Boolean.TRUE.compareTo(Boolean.FALSE) > 0
所以为了使包含 O 的字符串先行,我用 !
这会打印
Orange, Watermelon, Apple, Banana, Peach
注意:在这种情况下,不需要 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(", ")));
打印
Watermelon, Orange, Peach, Banana, Apple