为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

临摹微笑 2021-09-03 10:26:13
我有以下清单:List<String> fruits = new ArrayList<String>(Arrays.asList("Apple", "Banana", "Orange", "Watermelon", "Peach"));我需要在这种情况下订购它:首先,包含字符“o”或“O”的那些然后,剩下的。结果应该是:Orange, Watermelon, Apple, Banana, Peach我如何在 Java 8 中做到这一点?
查看完整描述

1 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

您可以使用 Comparator 链。


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


查看完整回答
反对 回复 2021-09-03
  • 1 回答
  • 0 关注
  • 342 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信