如何基于Integer类型Comparator构建IntIdx类型的链式Comparator?
问题:基于外部传入的Comparator实现IntIdx的链式排序
我有如下简单的辅助类:
private static class IntIdx { int val; int idx; IntIdx(int val, int idx) { this.val = val; this.idx = idx; } public int getValue() { return val; } public int getIdx() { return idx; } }
原本我使用如下链式写法的Comparator,按value再按idx对IntIdx进行排序:
static public List<Integer> decode(List<Integer> al) { final Comparator<IntIdx> idxComp = Comparator .comparingInt(IntIdx::getValue) .thenComparingInt(IntIdx::getIdx); // ...[其他代码]... }
现在需要让value按不同规则排序,希望调用者传入Comparator<Integer>来指定value的排序逻辑,但调用者无需知晓IntIdx的实现细节。目前我能通过匿名类实现,但写法不够简洁:
static public List<Integer> decode(List<Integer> al, Comparator<Integer> valComp) { final Comparator<IntIdx> testComp = (i1, i2) -> { int r = valComp.compare(i1.getValue(), i2.getValue()); if (r != 0) { return r; } return Integer.compare(i1.getIdx(), i2.getIdx()); }; // ...[其他代码]... }
我想知道是否存在类似Comparator.comparing的链式写法来实现该逻辑,而非当前的匿名类写法?
内容的提问来源于stack exchange,提问作者EdmCoff
相关产品推荐
相关产品推荐

