【发布时间】:2021-04-13 15:24:04
【问题描述】:
我是 Lambda 的新手,这是教科书(简而言之是 java)所说的:
只有某些类型有资格成为 lambda 的目标。 目标类型也称为功能接口,它们必须:
- 成为接口
- 只有一种非默认方法(但可能有其他默认方法)
这本书给了我一个例子:
File dir =new File("/src");
String[] fileList =dir.list((d,fName)->fName.endWith(".java"))
我知道这个 lambda 将转换为 FilenameFilter 接口,这是一个 @FunctionalInterface 它确实符合书中的描述
但是,当 sort() 期望收到 Comparator 时,我可以在这里使用 lambda
int n =12;
Function<String,String[]> f = (s) -> {
String[] ans = new String[n];();
for (int i = 0; i < n; i++) {
ans[i] = s;
}
return ans;};
Arrays.sort(f.apply("colin"),(String s1 ,String s2)->{
return s1.length() - s2.length();});
我查看它的源代码发现Comparator 是@FunctionInterface
但是它有两个非默认方法compare和equals。和书上说的不一样。
【问题讨论】:
-
我冒昧地删除了您(否则说得好)问题底部的第二个请求,因为 SO 不太适合同时处理多个问题。另外,恐怕您在那里发布的那种请求并不是特别适合整个 SO(一般的“我如何学习 X”类型的指导并不完全适合问答模型它是建立在上面的)。
-
哦,我明白了。我是新来的,所以我不太明白。对不起
标签: java lambda functional-programming java-stream