gpt4 book ai didi

java - 如何在 Lambda 中将具有一个参数的方法引用到具有两个参数的目标?

转载 作者:行者123 更新时间:2023-12-01 09:01:49 24 4
gpt4 key购买 nike

在 Lambda 表达式中,我正在研究以下示例。但我不明白这里代码的逻辑。

这里如何或在何处执行函数 sameTemp。因为我将其作为方法引用传递,但随后我调用 f.func(vals[i], v),即使 SameTemp 接受 1 个参数。

package lambda;

//A functional interface that takes two reference arguments
//and returns a boolean result.
interface MyFunc5<T> {
boolean func(T v1, T v2);
}

class HighTemp {

private int hTemp;

HighTemp(int ht) {
hTemp = ht;
}

boolean sameTemp(HighTemp ht2) {
return hTemp == ht2.hTemp;
}

boolean lessThanTemp(HighTemp ht2) {
return hTemp < ht2.hTemp;
}

}

public class InstanceMethWithObjectRefDemo {

static <T> int counter(T[] vals, MyFunc5<T> f, T v) {
int count = 0;

for (int i = 0; i < vals.length; i++)
if (f.func(vals[i], v))
count++;

return count;
}

public static void main(String args[]) {
int count;

// Create an array of HighTemp objects.
HighTemp[] weekDayHighs = { new HighTemp(89), new HighTemp(82), new HighTemp(89)};
//Why there is no error referencing sameTemp to the place of MyFunc5<T> f because MyFunc5<T> f
//has 2 args while sameTemp has 1
count = counter(weekDayHighs, HighTemp::sameTemp, new HighTemp(89));
System.out.println(count + " days had a high of 89");

}

}

最佳答案

当您有 Type::instanceMethod 形式的方法引用时(不要与 instance::instanceMethod 混淆),生成的 lambda 隐式地期望一个实例为它的第一个参数并使用其余参数调用该实例上的方法。因此 HighTemp::sameTemp 相当于 (HighTemp ht1, HighTemp ht2) -> ht1.sameTemp(ht2),它与 MyFunc5 具有相同的函数签名.func()THighTemp 时。

换句话说,当您调用 f.func(vals[i], v) 时,它会被转换为 vals[i].sameTemp(v)

关于java - 如何在 Lambda 中将具有一个参数的方法引用到具有两个参数的目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41608564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com