请求将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
相关产品推荐
相关产品推荐

