如何在按 属性 排序之前按类型排序
How to sort by type before sorting by property
我正在尝试按类型排序然后 属性。我会用一个例子更好地解释:
假设有3种:黄色水果、红色水果和水果。当然,黄色水果和红色水果的类型继承了水果的特性。黄色水果下面是香蕉和柠檬。红色水果下面是苹果和草莓。水果下面是西瓜和橘子。
排序后的列表应如下所示:
橙子、西瓜、香蕉、柠檬、苹果、草莓
列表按种类排序,先是水果,然后是黄色水果,然后是红色水果。然后在每种类型中,对象然后按字母顺序排序。
到目前为止,这是我对每种类型中的字母顺序进行排序的方法,但我不知道如何对这些类型进行排序。我在代码的其他部分有吸气剂。
public static Comparator<Fruit> FRUIT_ORDER = new Comparator<Fruit>() {
public int compare(Fruit a, Fruit b) {
if (a.getClass() == b.getClass()) {
String Name1 = a.getFruitName();
String Name2 = b.getFruitName();
//ascending order
return Name1.compareTo(Name2);
}
}
};
假设class苹果和葡萄适当地低于class水果你可以这样做。
Comparator<Fruit> FRUIT_ORDER = Comparator
.comparing((Fruit f) -> f.getClass().getSimpleName())
.thenComparing(Fruit::getColor);
List<Fruit> f = new ArrayList<>(
List.of(new Apple("Red"), new Apple("Green"),
new Grapes("Purple"), new Grapes("Green")));
f.sort(FRUIT_ORDER);
System.out.println(f);
可以打印如下内容(在 Fruit class 中覆盖 toString
)。
[Apple Green, Apple Red, Grapes Green, Grapes Purple]
我正在尝试按类型排序然后 属性。我会用一个例子更好地解释:
假设有3种:黄色水果、红色水果和水果。当然,黄色水果和红色水果的类型继承了水果的特性。黄色水果下面是香蕉和柠檬。红色水果下面是苹果和草莓。水果下面是西瓜和橘子。
排序后的列表应如下所示:
橙子、西瓜、香蕉、柠檬、苹果、草莓
列表按种类排序,先是水果,然后是黄色水果,然后是红色水果。然后在每种类型中,对象然后按字母顺序排序。
到目前为止,这是我对每种类型中的字母顺序进行排序的方法,但我不知道如何对这些类型进行排序。我在代码的其他部分有吸气剂。
public static Comparator<Fruit> FRUIT_ORDER = new Comparator<Fruit>() {
public int compare(Fruit a, Fruit b) {
if (a.getClass() == b.getClass()) {
String Name1 = a.getFruitName();
String Name2 = b.getFruitName();
//ascending order
return Name1.compareTo(Name2);
}
}
};
假设class苹果和葡萄适当地低于class水果你可以这样做。
Comparator<Fruit> FRUIT_ORDER = Comparator
.comparing((Fruit f) -> f.getClass().getSimpleName())
.thenComparing(Fruit::getColor);
List<Fruit> f = new ArrayList<>(
List.of(new Apple("Red"), new Apple("Green"),
new Grapes("Purple"), new Grapes("Green")));
f.sort(FRUIT_ORDER);
System.out.println(f);
可以打印如下内容(在 Fruit class 中覆盖 toString
)。
[Apple Green, Apple Red, Grapes Green, Grapes Purple]