Java排序列表,首先按长度然后按字母顺序排列流

标签 java sorting java-stream compare comparator

我已经可以按描述长度排序,但是如果两个 Article 的长度相同,我如何按字母顺序对它们进行排序? (如果两篇文章的描述长度相同,则按字母顺序排序)。

   public List<Article> sortAsc() {
    removeNull();
    return articles.stream()
            .sorted(Comparator.comparingInt(a -> a.getDescription().length()))
            .collect(Collectors.toList());
}




public class ComparatorAppController implements Comparator<String> {

/***
 * compare each element
 * @param o1
 * @param o2
 * @return
 */
public int compare(String o1, String o2) {
    // check length in one direction
    if (o1.length() > o2.length()) {
        return 1;
    }
    // check length in the other direction
    else if (o1.length() < o2.length()) {
        return -1;
    }
    // if same alphabetical order
    return o1.compareTo(o2);
}

在这种情况下如何使用比较器?还是我应该将其更改为其他内容?

最佳答案

您的自定义比较器看起来不错。然而,在 streamssorted 方法中,您使用了另一个比较器。

考虑到自定义比较器与以下代码块在同一类中,这就是您可以插入自定义比较器的方法。

  return articles.stream()
            .sorted(this::compare)
            .collect(Collectors.toList());

关于Java排序列表,首先按长度然后按字母顺序排列流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72388363/

相关文章:

java - 合并 n 个列表并对数据进行排序,保持原始顺序/约束

lambda - 是否可以用 java 8 流替换简单的 java for 循环(带索引)

Java:如何将 List<T> 中的对象添加到 Map(键:Enum,值 List<T>)

sorting - Hadoop 在 Reduce Side Join 中按值排序

java - 在 Java 中,流相对于循环的优势是什么?

java - 隐藏响应对象中的 JSON 字段

java - 在 Intellij 中显示一种方法的覆盖率数据

java - 如何使用 JTabbedPane 引用特定选项卡?

java - @EnableAspectJAutoProxy Spring MVC 应用程序失败

c - 对数组进行排序会将值替换为零