Java 如何将lambda表达式更改为方法引用
我需要有关将lambda表达式更改为方法引用的帮助: 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
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()
需要一个带有输入参数的函数。