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之前。