首页 >Java >java教程 >为什么 Java 排序中的 Lambda 表达式'Comparator.reversed()”失败?

为什么 Java 排序中的 Lambda 表达式'Comparator.reversed()”失败?

Barbara Streisand
Barbara Streisand原创
2024-12-03 21:38:12489浏览

Why Does `Comparator.reversed()` Fail with Lambda Expressions in Java Sorting?

为什么 Comparator.reversed() 使用 Lambda 会失败

使用 Comparator.comparing 与 lambda 表达式对 User 对象列表进行排序时,可能会出现错误:

userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error

这是由于限制编译器的类型推断机制。编译器很难确定 lambda 参数“u”的类型。

在以下示例中,使用方法引用允许编译器推断目标类型并避免错误:

userList.sort(Comparator.comparing(User::getName).reversed()); // works

方法引用提供了额外的类型信息,编译器使用这些信息来推断 'u' 作为 User 的类型。

避免使用 a 时出现错误lambda,您可以显式指定 lambda 参数的类型:

userList.sort(Comparator.comparing((User u) -> u.getName()).reversed());

在未来的编译器版本中,此问题可能会得到解决,错误可能不再发生。

以上是为什么 Java 排序中的 Lambda 表达式'Comparator.reversed()”失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn