使用比较器对多个 class 属性进行排序
Using comparator to sort multiple class properties
我的 class 是:
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
class,它将首先按组对元素进行排序,然后如果它在同一组中则按编号排序。我的代码是:
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;
}
}
我不确定如何制定它才能使其发挥作用。
如果您使用的是 Java 8 及更高版本,则如下所示:
Comparator.comparingInt(Element::getGroup).thenComparingInt(Element::getNumber);
这假设您有 getter 方法用于 group
和 number
分别命名为 getGroup
和 getNumber
。
Java 8 的 JDK 中的增强功能使得创建这样一个没有所有样板的比较器变得非常容易:
Comparator<Element> groupComparator =
Comparator.comparingInt(e -> e.group).thenComparingInt(e -> e.number);
我的 class 是:
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
class,它将首先按组对元素进行排序,然后如果它在同一组中则按编号排序。我的代码是:
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;
}
}
我不确定如何制定它才能使其发挥作用。
如果您使用的是 Java 8 及更高版本,则如下所示:
Comparator.comparingInt(Element::getGroup).thenComparingInt(Element::getNumber);
这假设您有 getter 方法用于 group
和 number
分别命名为 getGroup
和 getNumber
。
Java 8 的 JDK 中的增强功能使得创建这样一个没有所有样板的比较器变得非常容易:
Comparator<Element> groupComparator =
Comparator.comparingInt(e -> e.group).thenComparingInt(e -> e.number);