gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:50:36 27 4
gpt4 key购买 nike

我有以下 list :

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

我需要在这种情况下订购它:
  • 首先,包含字符“o”或“O”的那些
  • 然后,剩下的。

  • 结果应该是:
    Orange, Watermelon, Apple, Banana, Peach

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

    最佳答案

    您可以使用 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

    关于java - 按特定字符排序列表(Java 8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52201044/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com