Java/Android - 两个 Collections.sort 组合(首先按 int,然后按名称)

标签 java android list sorting arraylist

我有一个包含我自己的对象的列表,称为 OrderedProducts。我想先按 int sequence 排序此列表,然后按 String name 排序。

我知道如何首先使用以下默认 Collections.sort 按顺序排序:

Collections.sort(orderedProductsList, new Comparator<OrderedProduct>(){
    @Override
    public int compare(OrderedProduct op1, OrderedProduct op2){
        if(op1.getSequence() < op2.getSequence())
            return -1;
        else if(op1.getSequence() > op2.getSequence())
            return 1;
        else // op1.getSequence() == op2.getSequence()
            return 0;
    }
});

我现在想要的是在有序序列中按名称排序。因此,例如,我的列表中有以下 OrderedProducts:

  1. 序列 = 2;姓名 = "AAA";
  2. 序列 = 4;姓名 = "AAA";
  3. 序列 = 7;名称 = "BBB";
  4. 序列 = 2;名称 = "CCC";
  5. 序列 = 1;姓名 = "ZZZ";
  6. 序列 = 4;姓名 = "ZZZ";
  7. 序列 = 4;姓名 = "ABC";

这应该像这样排序:

5, 1, 4, 2, 7, 6, 3.

Sequence    Name

1           "ZZZ"
2           "AAA"
2           "CCC"
4           "AAA"
4           "ABC"
4           "ZZZ"
7           "BBB"

最佳答案

在你的比较器中,当序列相等时比较名字

Collections.sort(orderedProductsList, new Comparator<OrderedProduct>(){
    @Override
    public int compare(OrderedProduct op1, OrderedProduct op2){
        if(op1.getSequence() < op2.getSequence())
            return -1;
        else if(op1.getSequence() > op2.getSequence())
            return 1;
        else 
            return op1.getName().compareToIgnoreCase(op2.getName());            
    }
});

关于Java/Android - 两个 Collections.sort 组合(首先按 int,然后按名称),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23989854/

相关文章:

java - 将类变量传递给另一个类

android - 关于 Activity 生命周期和资源删除/分配的问题

android - 不可转换类型;无法将 ArrayList<Parcelable> 转换为 List<>

Java编译错误: List<Integer> cannot be converted to ArrayList<Integer>

Java - 剪刀石头布 - 如果错误则额外循环一次并计算获胜次数

java - K-Means迭代处理输出/群集2失败

java - 有没有开源的Java库或java源代码来简化 boolean 表达式

Android:来自 Android Box Remote 的按键事件

c# - 将 2 个列表连接成 1 个 C# 问题

html - 悬停时更改背景图像