Java 什么';What’对列表中的某些项目进行排序的最佳方式是一种方式,其余的则是另一种方式?

Java 什么';What’对列表中的某些项目进行排序的最佳方式是一种方式,其余的则是另一种方式?,java,sorting,Java,Sorting,假设我执行一个搜索,返回一个对象列表 { age: 5, color: Yellow, eggs: 2 } { age: 3, color: White, eggs: 5 } { age: 4, color: Brown, eggs: 9 } { age: 2, color: Green, eggs: 4 } { age: 3, color: Red, eggs: 1 } { age: 1, color: Blue, eggs: 6 } 我想全部输出,但要按特定顺序输出。 如果

假设我执行一个搜索,返回一个对象列表

{ age: 5, color: Yellow, eggs: 2 }
{ age: 3, color: White,  eggs: 5 }
{ age: 4, color: Brown,  eggs: 9 }
{ age: 2, color: Green,  eggs: 4 }
{ age: 3, color: Red,    eggs: 1 }
{ age: 1, color: Blue,   eggs: 6 }
我想全部输出,但要按特定顺序输出。 如果年龄是3岁,我首先要这些东西,按鸡蛋的数量排序。 然后,我希望其余的项目按颜色字母顺序排序

因此,排序后的列表将是

|   3's: eggs   |    rest: alphabetically on color    |
 White  -  Red  -  Blue  -  Brown  -  Green  -  Yellow
最好不创建临时列表,进行排序的最佳方法是什么


它可以使用单个比较器来完成,或者可能使用streams来完成吗?

因为Java 8,
比较器有一些有用的静态方法:

new AgeComparator().thenComparingInt(MyObj::getEggs).thenComparing(new ColorComparator());
不确定你的班级是什么样子-这就是你想要的吗


一般来说,我也喜欢ApacheCommons结合比较,但在你的例子中,它似乎太有限了。

你可以用一个单一的、杂乱的比较器来完成。这个想法是:

int compare(myType obj1, myType obj2)
{
    // first compare age
    if (obj1.age == 3)
    {
        if (obj2.age == 3)
        {
            // ages are both 3, so count eggs
            return obj1.eggs.compareTo(obj2.eggs);
        }
        // age 3 sorts before everything else
        return -1;
    }
    else if (obj2.age == 3)
    {
        // if obj2.age is 3, and obj1.age isn't 3,
        // then obj1 is greater than obj2
        return 1;
    }

    // compare color
    return obj1.color.compareTo(obj2.color);
}

请原谅任何语法错误;我的java有点生疏了。< /P>如果你认为元素是自然顺序的,我会让类实现<代码>可比的< /COD>接口蚂蚁,正确地执行<代码> CuffReToTo()/Case>方法。它可以用一个比较器来完成:是的,但是你需要写它。你试过什么了吗?我不认为那会满足他的要求。这将按年龄排序,在同一年龄内,它将按蛋的数量排序,然后按颜色排序。因此,使用您的建议的输出将把年龄为1和2的项目置于3之前。