Java排序Jobs列表时Lambda表达式报错:不兼容类型、返回类型错误
解决Java Lambda排序时的类型不匹配错误
你遇到的这个报错,核心原因是Comparator接口的compare方法要求返回int类型,但你的lambda表达式返回了boolean值。
Java里,Comparator<T>的compare(T o1, T o2)方法需要返回三个可能的int值:
- 正数:表示o1应该排在o2后面
- 负数:表示o1应该排在o2前面
- 0:表示两者排序优先级相同
而你写的j1.get(0) > j2.get(0)会返回true或false,这和方法要求的int类型不兼容,所以编译器直接报错了。
给你几种正确的写法:
1. 用Integer的compare方法(最简洁)
直接利用Java提供的工具方法来生成正确的int返回值:
// 按利润升序排序(从低到高) jobs.sort((j1, j2) -> Integer.compare(j1.get(0), j2.get(0))); // 如果需要按利润降序排序(从高到低),反转参数顺序即可 jobs.sort((j1, j2) -> Integer.compare(j2.get(0), j1.get(0)));
2. 手动实现compare逻辑(更直观)
如果你想自己控制排序逻辑的细节,可以手动返回对应int值:
jobs.sort((j1, j2) -> { int profit1 = j1.get(0); int profit2 = j2.get(0); if (profit1 > profit2) { return 1; // profit1更大,排在后面(升序) } else if (profit1 < profit2) { return -1; // profit1更小,排在前面 } else { return 0; // 利润相等,顺序不变 } });
3. 用Comparator静态方法(更易读)
Java 8+提供了更流畅的Comparator构建方式,代码可读性更高:
// 按利润升序排序 jobs.sort(Comparator.comparingInt(job -> job.get(0))); // 按利润降序排序,加上reversed() jobs.sort(Comparator.comparingInt(job -> job.get(0)).reversed());
选哪一种都可以,看你自己的习惯和代码场景需求。
内容的提问来源于stack exchange,提问作者Edamame
相关产品推荐
相关产品推荐

