使用比较器对多个类属性进行排序

时间:2018-04-18 16:29:30

标签: java comparator

我的班级为:

public class Element {
    int number, group, period;
    String symbol, name;
    double weight;




    public Element(int number, String symbol, String name, int group, int period, double weight) {
        this.number = number;
        this.symbol = symbol;
        this.name = name;
        this.group = group;
        this.period = period;
        this.weight = weight;
    }

我需要做一个Comparator类,它将首先按组对Element进行排序,然后如果它在同一组中按编号排序。我的代码是:

class GroupComparator implements Comparator<Element> {
    @Override
    public int compare(Element a, Element b) {
        return a.group < b.group ? -1 : a.group == b.group ? a.number-b.number : 1;
    }
}

我不确定如何制定它以使其发挥作用。

2 个答案:

答案 0 :(得分:1)

如果您使用的是Java 8及更高版本,它就像以下一样简单:

Comparator.comparingInt(Element::getGroup).thenComparingInt(Element::getNumber);

这假定您分别为名为groupnumber的{​​{1}}和getGroup设置了getter方法。

答案 1 :(得分:1)

Java 8的JDK中的增强功能使得在没有所有样板的情况下创建这样的比较器非常容易:

Comparator<Element> groupComparator =
    Comparator.comparingInt(e -> e.group).thenComparingInt(e -> e.number);