说我做了一个返回对象列表的搜索
{ 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
进行此排序的最佳方法是什么,最好不创建临时列表?
可以使用单个比较器完成,也可以使用流?
答案 0 :(得分:0)
从Java 8开始,Comparator
有一些有用的静态方法:
new AgeComparator().thenComparingInt(MyObj::getEggs).thenComparing(new ColorComparator());
不确定你的班级是什么样的 - 这就是你要求的吗?
总的来说,我也喜欢Apache Commons' CompareToBuilder用于组合比较,但在您的情况下似乎太有限了。
答案 1 :(得分:0)
你可以用一个凌乱的比较器来做到这一点。这个想法是:
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有点生疏。