java - 如何创建这个java比较器

标签 java comparator

我有这门课:

public class Test {

  private int    priority;
  private String desciption;
...
}

我有这个数组列表:

Priority: 1, Description: C2
Priority: 2, Description: C1
Priority: 3, Description: C1
Priority: 4, Description: C2

我想要这个结果:

Priority: 1, Description: C2
Priority: 4, Description: C2
Priority: 2, Description: C1
Priority: 3, Description: C1

我如何使用比较器来做到这一点? 谢谢!

编辑:

我回答你所有的问题:

@retro:不。描述是一个没有特定格式的字符串。它也可以为空。

@tobias_k:首先按描述“分组”,然后按优先级排序。优先级总是不相等。

@user270349:

这是我的尝试:

int result = 0;
if (o1.getPriority() < o2.getPriority()) result = -1;
else if (o1.getPriority() > o2.getPriority()) result = 1

result *= o1.getDescription().compareTo(o2.getDescription());

return result;

编辑2:

另一个输入/输出示例:

我有这个数组列表:

Priority: 1, Description: C2
Priority: 2, Description: C3
Priority: 3, Description: C1
Priority: 4, Description: C2

我想要这个结果:

Priority: 1, Description: C2
Priority: 4, Description: C2
Priority: 2, Description: C3
Priority: 3, Description: C1

这是我的解决方案:

            List<Test> testList = new ArrayList<>();
    testList.add(new Test(4, "C2"));
    testList.add(new Test(2, "C3"));
    testList.add(new Test(3, "C1"));
    testList.add(new Test(1, "C2"));


    Comparator<Test> comparator = new Comparator<Test>() {

        @Override
        public int compare(Test o1, Test o2) {
            int res = o1.getDescription().compareTo(o2.getDescription());
            if (res == 0)
                return o1.getPriority() < o2.getPriority() ? -1 : 1;
            else
                return res;
        }
    };

    Collections.sort(testList, comparator);


    List<String> valoriInseriti = new ArrayList<>();
    List<Test> grouping = new ArrayList<>();
    for (Test t : testList) {
        if (!valoriInseriti.contains(t.getDescription())) {
            valoriInseriti.add(t.getDescription());
            grouping.add(t);
        }
    }


    comparator = new Comparator<Test>() {

        @Override
        public int compare(Test o1, Test o2) {
            return o1.getPriority() < o2.getPriority() ? -1 : 1;
        }
    };

    Collections.sort(grouping, comparator);


    Collections.sort(testList, comparator);

    List<Test> output = new ArrayList<>();
    for (Test t1 : grouping) {
        for (Test t2 : testList) {
            if (t2.getDescription().equals(t1.getDescription())) {
                output.add(t2);
            }
        }
    }

    System.out.println("==============================");
    for (Test t : output)
        System.out.println(t);

最佳答案

测试实现 Comparator 并重写 compare() 方法

  public class Test implements Comparator<Test>{
    private int    priority;
    private String desciption;

    @Override
    public int compare(Test o1, Test o2) {
       // your code here
    }

  }

关于java - 如何创建这个java比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20399660/

相关文章:

java比较器,如何按整数排序?

java - 如何为不受信任的应用程序运行创建沙箱?

java - SpringBoot : Inject repository into a class defined in service layer

c# - 比较 3 个对象

java - TreeMap 比较器函数重载

c# - 奇怪的可空比较行为

java - 为什么我的 fragment 没有取代我的 Activity 布局?

java - 数据源属性

java - JSONObject 无法解析为类型

Java-对具有多个小数点的字符串进行排序