java - 特定项目字段列表的比较器

标签 java sorting comparator

我有一个列表元素。

每个 OrderType 项目都有一个整数字段“优先级”,用于设置列表重新分类的优先级(1、2 或 3)。

我想创建一个比较器,将列表从优先级 1 重新排序到优先级 3。我可以使用 Collections.sort 方法吗?

我看到了这个例子:

package com.javacodegeeks.example;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class SimpleSortExample {

    public static void main(String[] args) {
        List list = new ArrayList();

        for (int i=0;i<10;i++) {
            list.add((int) (Math.random() * 100));
        }

        System.out.println("Initial List: "+list);
        Collections.sort(list);
        System.out.println("Sorted List: "+list);

    }

}

有一些例子here .

我该怎么做?

我尝试过:

Collections.sort(list, new Comparator() {

        @Override
        public int compare(Integer i1, Integer i2) {
            return (i2.intValue() > i1.intValue()) ? 1 : -1;
        }

    });

但我收到错误,我必须实现 not ovveride 方法compare(object, Object)...

像compare(Integer, Integer)一样,不是重写方法。

最佳答案

您必须使用正确的List<>类型如 List<Integer> ,然后使用 Integer应该没事。这是建议的选择。

或者,如果您坚持使用非类型化 List ,你应该这样做

    @Override
    public int compare(Object i1, Object i2) {
        ...
    }

相反。第二种选择不如另一种:类型安全性较低,并且必须进行转换才能使用它。

<小时/>

使用List<OrderType> ,你必须完全改变你的代码,但你不能这样做

    for (int i=0;i<10;i++) {
        list.add((int) (Math.random() * 100));
    }

再长一点(当然)。

此外,比较器应该像这样使用

    Collections.sort(l, new Comparator<OrderType>() {

        @Override
        public int compare(OrderType o1, OrderType o2) {
            return Integer.compare(oT1.getPriority(), oT2.getPriority());
        }
    });

特别注意

  • Comparator<OrderType>组成 compare() 的部分有正确的参数类型
  • Integer.compare()调用这使得检查更加容易(其他示例无法比较相等性......)

关于java - 特定项目字段列表的比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32581713/

相关文章:

java - 为什么这是程序的输出?

java - 为 spark-java 中的所有 cookie 设置 HttpOnly

ios - 使用 NSLocale zh_Hans_CN 在 iOS 上的中文数字排序顺序不正确?

java - 通过 int 字段的降序对列表进行排序,如果 int 字段相等则按字典顺序排序

Java 实现 PriorityQueue - 当没有提供 Comparator 时

java - 在 Java 中放置比较器类的最佳位置是哪里

java - 添加到大型 Java 集合,性能瓶颈

java - JSONObject 无法转换为 JSONArray、SimpleJSON

linux - linux sort 的奇怪行为

c++ - 重载比较运算符以在 C++ 中使用 STL 排序