Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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 如何将lambda表达式更改为方法引用_Java_Lambda_Method Reference - Fatal编程技术网

Java 如何将lambda表达式更改为方法引用

Java 如何将lambda表达式更改为方法引用,java,lambda,method-reference,Java,Lambda,Method Reference,我需要有关将lambda表达式更改为方法引用的帮助: lambda表达式: intervalCodes.stream().forEach(code -> { modProfile.addIntervalUsageCode(createIntervalCode(code)); }); 我可以把上面的表达式改成这样吗: intervalCodes.stream().forEach(modProfile::addIntervalUsageCode(c

我需要有关将lambda表达式更改为方法引用的帮助:

lambda表达式:

intervalCodes.stream().forEach(code -> {
            modProfile.addIntervalUsageCode(createIntervalCode(code));
          });
我可以把上面的表达式改成这样吗:

intervalCodes.stream().forEach(modProfile::addIntervalUsageCode(createIntervalCode));

有什么建议吗?

假设
createIntervalCode()
是一个无副作用的实例方法,您可以将lambda拆分为两个方法引用:

intervalCodes.stream()
        .map(this::createIntervalCode)
        .forEach(modProfile::addIntervalUsageCode);

如果是静态方法,请使用
ClassName::createIntervalCode

假设
createIntervalCode()
是无副作用的实例方法,可以将lambda拆分为两个方法引用:

intervalCodes.stream()
        .map(this::createIntervalCode)
        .forEach(modProfile::addIntervalUsageCode);

如果是静态方法,请使用
ClassName::createIntervalCode

我的建议:保持代码不变。您正在调用两个方法,因此无法将其更改为单个方法引用。您可以尝试某种函数组合(请参阅),但这不太可能改善代码。如果您希望简洁,请删除过时的大括号,如果
intervalCodes
集合,请省略流操作,如果您只想做
forEach
intervalCodes.forEach,则不需要流操作(code->modProfile.AddIntervaluseCode(createIntervalCode(code));
我的建议:让代码保持原样。您正在调用两个方法,因此无法将其更改为单个方法引用。您可以尝试某种函数组合(请参阅),但这不太可能改善您的代码。如果您希望简洁,请删除过时的大括号,如果
intervalCodes
集合,请省略流操作,如果您只想做
forEach
intervalCodes.forEach(code->modProfile.addIntervaluseCode)(createIntervalCode(code));
createIntervalCode
有一个参数
code
,如OP的问题中所述:
code->{modProfile.AddIntervaluseCode(createIntervalCode(code));}
。方法引用仍然有效吗?@walen当然。
map()
需要一个
函数,它接受一个输入参数。
createIntervalCode
有一个参数
code
,如OP的问题所述:
code->{modProfile.addIntervaluseCode(createIntervalCode(code));}
。方法引用仍然有效吗?@walen当然。
map()
需要一个带有输入参数的
函数。