相关疑难解决方法(0)

使用方法引用而不是多参数lambda

我对"引用特定类型的任意对象的实例方法"背后的概念感到困惑.Oracle 文档有一个关于此的示例:

String[] stringArray = { "Barbara", "James", "Mary", "John", "Patricia", "Robert", "Michael", "Linda" };
Arrays.sort(stringArray, String::compareToIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

我在这种方法参考中看到的大多数例子都是这样的:如果lambda是这样的:x -> x.func()那么你就可以这样写ClassOfX::func.文档中的示例说:

方法引用String :: compareToIgnoreCase的等效lambda表达式将具有形式参数列表(String a,String b),其中a和b是用于更好地描述此示例的任意名称.方法引用将调用方法a.compareToIgnoreCase(b).

现在的问题是:像任何两个参数的lambda (a, b) -> a.func(b)func方法必须是第一个参数,拉姆达的第二个参数的实例方法将作为参数传递给该方法通过?如果我们有多个参数lambda那么func方法必须是lambda 的第一个参数的实例方法,而lambda的其他参数将按照lambda func中出现的顺序传递给它?我的意思是,而不是(a, b, c) -> a.func(b, c)我们可以写ClassOfA::func

对不起我的英语.我希望我能清楚地解决这个问题.

java lambda java-8

14
推荐指数
4
解决办法
1万
查看次数

如何使用方法引用调用参数化方法

考虑下面的代码,

interface TestInter {
    public void abc();
}


class DemoStatic {

    public static void testStatic(String abc) {
        System.out.println(abc);
    }

    public void runTest () {

        // Using lambda expression.
        String str = "demo string" ;
        TestInter demo1 = () -> DemoStatic.testStatic(str);
        demo1.abc();

        // Using method reference.
        TestInter demo2 = DemoStatic::testStatic; // This line is not compiling.
        demo2.abc();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果这样的答案中描述的方法的参数将被消除,我们可以调用该testStatic方法作为TestInter接口实体的主体.abc()testStaic()

但在这种情况下,我们如何为参数化方法编写方法参考testStatic

java lambda java-8 method-reference

2
推荐指数
1
解决办法
304
查看次数

标签 统计

java ×2

java-8 ×2

lambda ×2

method-reference ×1