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

Java TreeSet中AlphanumComparator与其他比较器的链式调用问题

解决Comparator链式调用AlphanumComparator的问题

错误根源在于lambda参数类型未明确,编译器无法自动推断s1和s2的类型为NodeInstance,导致强制转换失败。可以通过两种方式修复:

方式一:显式指定lambda参数类型

直接在lambda中声明参数类型,让编译器明确类型信息:

Comparator<NodeInstance> comparator = ((NodeInstance s1, NodeInstance s2) -> 
    new AlphanumComparator().compare(s1.getDefinitionId().toString(), s2.getDefinitionId().toString()))
    .thenComparingInt(NodeInstance::getDisplayOrder);

方式二:使用Comparator.comparing方法包装字母数字比较逻辑

这种写法更贴合Java 8+的Comparator链式风格,可读性更强:

Comparator<NodeInstance> comparator = Comparator.comparing(
    node -> node.getDefinitionId().toString(),
    new AlphanumComparator()
).thenComparingInt(NodeInstance::getDisplayOrder);

两种方式都能实现先按definitionId的字母数字顺序排序,再按displayOrder升序排序的需求,之后即可正常传入TreeSet构造方法:

TreeSet<NodeInstance> treeSet = new TreeSet<>(comparator);

内容的提问来源于stack exchange,提问作者Peter Kronenberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:05:34