You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:50:53