Java方法参考字符串如何实现比较器< string>作品?

发布于 2025-01-20 03:00:17 字数 357 浏览 0 评论 0原文

java.util.Comparator<String> lambda = (s1, s2) -> s1.compareTo(s2); // line 1
java.util.Comparator<String> methodRef = String::compareTo;         // line 2

我不明白为什么第2行没有错误而工作,以及为什么它等效于第1行。第2行返回了接收字符串和返回的方法参考和int(IE int comparare(string s)),但是,比较器功能方法签名为int comparare(t o1,t o2);>

java.util.Comparator<String> lambda = (s1, s2) -> s1.compareTo(s2); // line 1
java.util.Comparator<String> methodRef = String::compareTo;         // line 2

I can't understand why line 2 works without error, and why it is equivalent to line 1. Line 2 is returning a method reference that receives a string and returns and int (i.e. int compare(String s) ), however, comparator functional method signature is int compare(T o1, T o2);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

叫思念不要吵 2025-01-27 03:00:17

String::compareTo 的引用是一种特殊的方法引用,称为 “引用特定类型的任意对象的实例方法”

在这种情况下,编译器知道我们正在引用给定类的非静态方法,并且它可以转换为具有所需签名的函数接口。

例如:

String t1 = "t1";
String t2 = "t2";

// this
Comparator<String> comparator = String::compareTo;
comparator.compareTo(t1, t2);

// will be 'translated' to:
Comparator<String> comparator = (String s1, String s2) -> s1.compareTo(s2);
t1.compareTo(t2);

请注意,该方法将使用第一个参数的上下文来调用(使用的 this 将是 t1)。

lambda 状态 的第 8 点和第 9 点给出实施此方案的理由。

来自方法参考概述 youtube 视频

方法概述参考文献

The ref to String::compareTo is a special kind of method reference called "Reference to an Instance Method of an Arbitrary Object of a Particular Type".

In this case, the compiler knows that we are referencing a not-static method of a given class, and it can translate to a functional interface with the desired signature.

For example:

String t1 = "t1";
String t2 = "t2";

// this
Comparator<String> comparator = String::compareTo;
comparator.compareTo(t1, t2);

// will be 'translated' to:
Comparator<String> comparator = (String s1, String s2) -> s1.compareTo(s2);
t1.compareTo(t2);

Note that the method will be called with the context of the first parameter (the this used will be t1).

Points 8 and 9 of State of lambda give a rationale for this implementation.

From Overview of method references youtube video

Overview of method references

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文