我对这个方法引用语法有点困惑。
counter()
需要一个双函数,然而,尽管温度较高,lessThanTemp仍然是有效的参数。lessThanTemp()只接受一个参数。
这一行到底发生了什么:if(f.func)
?
MCVE:
import java.util.function.BiFunction;
class Demo {
static class HighTemp {
private int hTemp;
HighTemp(int ht) { hTemp = ht; }
boolean lessThanTemp(HighTemp ht2) {
return hTemp < ht2.hTemp;
}
}
static <T> int counter(T[] vals, BiFunction<T,T,Boolean> f, T v) {
int count = 0;
for (int i=0; i < vals.length; i++) {
if (f.apply(vals[i], v)) { // THIS LINE
count++;
}
}
return count;
}
public static void main(String args[]) {
HighTemp[] weekDayHighs2 = { new HighTemp(32), new HighTemp(12),
new HighTemp(24), new HighTemp(19),
new HighTemp(18), new HighTemp(12),
new HighTemp(-1), new HighTemp(13) };
int count = counter(weekDayHighs2, HighTemp::lessThanTemp, new HighTemp(19));
System.out.println(count + " days had a high of less than 19");
}
}
请参阅相关文档,其中指出:
方法引用的等效lambda表达式String::compareToIgnoreCase将具有形式参数列表(字符串a,字符串b),其中a和b是用于更好地描述此示例的任意名称。方法引用将调用方法a.compareToIgnoreCase(b)。
换句话说,HighTemp::ThanTemp
等价于lambda表达式:
(a, b) -> a.lessThanTemp(b)
我是一名自学型开发人员,现在正在学习Java。我了解到,要对函数接口使用方法引用,我们引用的方法的签名必须与该函数接口内抽象方法的签名匹配。 但是在学习比较器时,发现“Comparator.comparing()”方法接受函数接口并返回一个比较器。我知道函数接口的抽象方法必须接受一个参数并返回一个值。 但是我可以将任何部分(而不是完全)匹配Function接口签名的方法(作为方法参考)传递给比较器
方案1
我尝试了以下代码,但不理解输出: 输出:字符串 为什么? 感谢您的关注!
书中的这部分内容描述了 Swift 编程语言的正式语法。这里描述的语法意在帮助你了解语言的更多细节,而不是允许你直接实现解析器或者编译器。 Swift 语言相对较小,因为看上去出现在 Swift 代码中各种地方的常见类型、函数和运算符实际上是在 Swift 标准库中定义的。尽管这些类型、函数和运算符不是 Swift 语言自身的一部分,但它们还是在书中这部分的讨论当中大量使用了。 如何阅读语法 用来
本页内容包括: 如何阅读语法 本书的这一节描述了Swift编程语言的形式语法。这里描述的语法是为了帮助您更详细的了解该语言,而不是让您直接实现一个解析器或编译器。 Swift语言相对小点,这是由于在Swift代码中几乎无处不在的许多常见的的类型,函数以及运算符都由Swift标准库来定义。虽然这些类型,函数和运算符不是Swift语言本身的一部分,但是它们被广泛用于这本书的讨论和代码范例。 如何阅读语
我正在阅读关于线程的oracle java教程,我看到了这个示例 当有人可能使用这些方法签入他们的代码时?thread.interrupt(标志)是静态的,所以通过上面的检查,我们实际上检查是否有任何踏面被中断了?即使是这样,根据教程,当线程通过调用静态方法thread.interrupted检查中断时,中断状态将被清除。或任何通过抛出InterruptedException退出的方法在这样做时将