如何在按 属性 排序之前按类型排序

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]