这个内部 class 的正确 lambda 是什么
what is the right lambda for this inner class
我有以下代码:
private List<String> searchFolder(File tempDirFile) {
List<String> listFile;
listFile = Arrays.asList(tempDirFile.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.contains(type);
}
}));
return listFile;
}
SonarLint 告诉我“让这个匿名内部 class 成为 lambda”。所以这个
new FilenameFilter(){.....}
应该“转换”为 lambda。我查找了案例和场景,但无法为我这里的这个特定案例找到解决方案。
根据 OP 的要求:FilenameFilter 是一个 FunctionalInterface 它只有一个抽象方法,它可以用与其签名匹配的 lambda 来实现,java 编译器将推断类型:
Arrays.asList(tempDirFile.list((dir, name) -> name.contains(type)));
编辑:@FunctionalInterface
注释是可选的,即使没有用它注释,您也可以只使用一个抽象方法为任何接口创建 lambda。
编辑 2:关于 lambda 表达式的更多信息 https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
我有以下代码:
private List<String> searchFolder(File tempDirFile) {
List<String> listFile;
listFile = Arrays.asList(tempDirFile.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.contains(type);
}
}));
return listFile;
}
SonarLint 告诉我“让这个匿名内部 class 成为 lambda”。所以这个
new FilenameFilter(){.....}
应该“转换”为 lambda。我查找了案例和场景,但无法为我这里的这个特定案例找到解决方案。
根据 OP 的要求:FilenameFilter 是一个 FunctionalInterface 它只有一个抽象方法,它可以用与其签名匹配的 lambda 来实现,java 编译器将推断类型:
Arrays.asList(tempDirFile.list((dir, name) -> name.contains(type)));
编辑:@FunctionalInterface
注释是可选的,即使没有用它注释,您也可以只使用一个抽象方法为任何接口创建 lambda。
编辑 2:关于 lambda 表达式的更多信息 https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html