猿问

按特定字符排序列表(Java 8)

我有以下清单:

List<String> fruits = new ArrayList<String>(Arrays.asList("Apple", "Banana", "Orange", "Watermelon", "Peach"));

我需要在这种情况下订购它:

  1. 首先,包含字符“o”或“O”的那些

  2. 然后,剩下的。

结果应该是:

Orange, Watermelon, Apple, Banana, Peach

我如何在 Java 8 中做到这一点?


临摹微笑
浏览 343回答 1
1回答

慕田峪4524236

您可以使用 Comparator 链。List<String> fruits = new ArrayList<>(Arrays.asList(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"Apple", "Banana", "Orange", "Watermelon", "Peach"));fruits.sort(Comparator.comparing((String s) -> !s.contains("O") && !s.contains("o"))&nbsp; &nbsp; &nbsp; &nbsp; .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(&nbsp; &nbsp; &nbsp; &nbsp; "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
随时随地看视频慕课网APP

相关分类

Java
我要回答