Java如何实现多优先级自定义排序:Foo>Bar>字母序>日期倒序
解决方法
只需要修改doComparison方法,补充Bar的二级优先级判断逻辑即可,原有比较器的拼接规则无需调整,即可完全匹配你要求的排序优先级:
private static int doComparison(String stuff, String otherStuff) { // 最高优先级:Foo排在最前 if (Foo.equals(stuff) && !Foo.equals(otherStuff)) { return -1; } if (!Foo.equals(stuff) && Foo.equals(otherStuff)) { return 1; } // 二级优先级:Bar排在Foo之后、其他名称之前 if (Bar.equals(stuff) && !Bar.equals(otherStuff)) { return -1; } if (!Bar.equals(stuff) && Bar.equals(otherStuff)) { return 1; } // 其余按name字母升序排列 return stuff.compareTo(otherStuff); }
逻辑验证
原有代码的比较器拼接顺序compareBazStuff.thenComparing(compareBazStartDates)已经天然适配你的需求:
- 先通过
compareBazStuff完成「Foo > Bar > 字母升序」的名称维度排序 - 名称维度排序结果相同时,再通过
compareBazStartDates按startDate倒序排列
完全符合你要求的优先级规则,不需要额外调整其他代码。
内容的提问来源于stack exchange,提问作者Euridice01
相关产品推荐
相关产品推荐

