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

请求将Java Comparator匿名类转换为Lambda表达式(类型转换存疑)

解决Comparator匿名类转Lambda的问题

直接给你转换后的Lambda版本,同时帮你简化原代码里冗余的部分:

Arrays.sort(arr, (item1, item2) -> {
    double cpr1 = (double) item1.value / item1.weight;
    double cpr2 = (double) item2.value / item2.weight;
    return Double.compare(cpr2, cpr1);
});

关键优化点说明:

  • Lambda简化:编译器能通过Arrays.sort的参数类型自动推断出这是Comparator<Item>,所以不需要显式声明(Item item1, Item item2),直接写(item1, item2)即可。
  • 去掉冗余包装:原代码里new Double(...)完全没必要,(double) item1.value / item1.weight本身就是double类型,不需要手动包装成Double对象。
  • 简化返回逻辑:原代码的if-else可以用Double.compare替代,因为你要实现的是降序排序(价值重量比高的在前),Double.compare(cpr2, cpr1)正好对应原逻辑:当cpr1 < cpr2时,cpr2 > cpr1,Double.compare返回1;反之返回-1,和原代码逻辑完全一致。

如果想更简洁,还可以写成一行:

Arrays.sort(arr, (item1, item2) -> Double.compare((double) item2.value / item2.weight, (double) item1.value / item1.weight));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:29:58