Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
传递函数调用方法参数java_Java_Lambda - Fatal编程技术网

传递函数调用方法参数java

传递函数调用方法参数java,java,lambda,Java,Lambda,我是Java8新手,尝试使用lambda函数接口优化我的一些代码 我的演示方法: private SampleReturn getExecRequest() { //some code SampleReturn sample = cache.get("exec key"); return sample; } 现在调用此方法,如果返回值不为null,则调用其他一些方法。这件作品有2-3个位置。例如: SampleReturn sample = getExec

我是Java8新手,尝试使用lambda函数接口优化我的一些代码

我的演示方法:

private SampleReturn getExecRequest() {
    //some code       
    SampleReturn sample = cache.get("exec key");
    return sample;
}
现在调用此方法,如果返回值不为null,则调用其他一些方法。这件作品有2-3个位置。例如:

SampleReturn sample = getExecRequest();
if (sample != null && sample.valid()) {
    saveRecords(records);
    insertMessages(messageId, Subject, Sender);
}
另一个用法:

SampleReturn sample = getExecRequest();
if (sample != null && sample.valid()) {
    saveRecords(records);
    saveSamples(records);
}

根据示例的输出,我调用了一些不同的函数,但模式是重复的。我想了解我是否可以使用任何Java8功能接口并优化这一部分,在这里我可以将要执行的代码直接传递到
getExecRequest()
该方法可以检查条件,然后在需要时调用其他函数。

您可以向该方法传递一个
Runnable
,并有条件地执行它:

private void doExecRequest(Runnable callback) {
    //some code       
    SampleReturn sample = cache.get("exec key");
    if (sample != null && sample.valid()) {
        callback.run();
    }
}
这样称呼它:

doExecRequest(() -> {
    saveRecords(records);
    insertMessages(messageId, Subject, Sender);
});
或:


当然可以,把它作为消费者传递。你能解释一下怎么做吗?我试着查找一些文档,但到处都能找到唯一的示例,就是使用System.out.printlns并将它们打印出来。
示例
记录
之间的关系是什么?有什么关系吗?并没有关系,示例只是一个包含是否应该执行下游代码的条件的对象。谢谢,我会尝试一下。您之前提到了
消费者
。这两者有什么区别?为什么我不能或不应该在这里使用
consumer
consumer
接受一个输入参数。我建议这样做是因为我错误地认为
记录
是由该方法生成的。
doExecRequest(() -> {
    saveRecords(records);
    saveSamples(records);
});