java匿名类 Lambda表达式练习
java匿名类 Lambda表达式练习
将下面list程序改编为匿名对象的形式,进一步改写为lambda表达式。
题目:
import java.io.*;
public class Main122 {
public static void main(String args[]) {
//确定文件夹路径
File dir = new File("D:\\JAVA_FILE\\IntelliJ\\JavaLzy\\src");
FileAccept fileAccept = new FileAccept();
// 确定后缀名为java
fileAccept.setExtendName("java");
// 将读入的符合条件的文件名填入数组
String[] fileName = dir.list(fileAccept);
// 遍历数组并输出
for (String name : fileName) {
System.out.println(name);
}
}
}
class FileAccept implements FilenameFilter {
private String extendName;
/*确定后缀名为 .s */
public void setExtendName(String s) {
extendName = "." + s;
}
/*该方法为bool形,判断name的结尾是否为extendName,符合条件则返回1*/
@Override
public boolean accept(File dir, String name) {
return name.endsWith(extendName);
}
}
参考下列 FilenameFilter接口 定义及 list方法 源码文件。
FilenameFilter接口定义
public interface FilenameFilter {
/**
*FilenameFilter是一个接口,如果要用list(FilenameFilter filter)方法必须要实现这样的一个接口
*accept()方法会返回一个boolean类型的值,list()方法会根据这个返回值来决定是不是要将某个名字添加到 * 返回列表中
* Tests if a specified file should be included in a file list.
* 测试如果指定的文件应该包含在文件列表中。
* @param dir the directory in which the file was found.发现该文件的目录。
* @param name the name of the file. 这个file的文件名
* @return <code>true</code> if and only if the name should be
* included in the file list; <code>false</code> otherwise.
* 当且仅当该name应包含在文件列表中时True;否则False
*/
boolean accept(File dir, String name);
}
File类中的list()方法:
//FilenameFilter filter是一个目录过滤器。list(FilenameFilter filter)方法会选择符合条件的文件或文件夹。
public String[] list(FilenameFilter filter) {
//首先还是调用list()方法,获取指定目录下的全部文件(夹)名字
String names[] = list();
//filter == null说明没有过滤条件
if ((names == null) || (filter == null)) {
return names;
}
ArrayList v = new ArrayList();
//遍历names[]数组中的所有文件(夹)名字
for (int i = 0 ; i < names.length ; i++) {
//如果accept()方法返回真,则添加到ArrayList中
if (filter.accept(this, names[i])) {
v.add(names[i]);
}
}
//将ArrayList转换成String[]类型返回
return (String[])(v.toArray(new String[v.size()]));
}
题解:
- 本程序功能为遍历某个文件夹中后缀为.java的文件并输出,在
File dir=new File(".");
中输入我们想要遍历的文件夹路径。 - 根据题目提供(暗示)的FilenameFilter接口我们可以直接重写accept方法。如下所示:
- 匿名类
import java.io.*;
public class Main123 {
public static void main(String[] args) {
File dir = new File(".");
String[] fileName = dir.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}
});
for (String name : fileName) {
System.out.println(name);
}
}
}
Lambda表达式:
import java.io.File;
public class Main1231 {
public static void main(String[] args) {
File dir = new File(".");
String[] fileName = dir.list((dir1, name) -> name.endsWith(".java"));
for (String name : fileName) {
System.out.println(name);
}
}
}
所有程序输出结果均为:与实际情况相符合
test.java
test2.java
与实际情况相符合