前言:
这段时间接触了 java.util.Optional 类来处理对象判空问题,在此基础上看到了许多 jdk 1.8 的语法,于是拿起之前购置的这本《写给大忙人看的 Java SE 8》进行学习。学完第一章后,在练习题的代码中运用了 java.util.Optional API,但直观感受并不是十分美妙(也可能是我用的太过魔怔了,没有理解该类的使用场景),如大家对我的代码有其他更优雅的写法,欢迎指正。
代码地址:
题目:
1、Arrays.sort方法中的比较器代码的线程与调用sort的线程是同一个吗?
不是。不过不清楚作者想考察什么知识点,这个问题貌似跟本章内容没有什么相关性。
2、使用java.io.File类的listFiles(FileFilter)和isDirectory方法,编写一个返回指定目录下所有子目录的方法。使用lambda表达式来代替FileFilter对象,再将它改写为一个方法的引用。
public static void main(String[] args) {
Optional.ofNullable(list).map(files -> Arrays.asList(files).stream())
.ifPresent(stream -> stream.forEach(System.out::println));
}
private static File[] getDirectory(String srcPath) {
return Optional.ofNullable(srcPath).filter(path -> path != null)
.map(File::new).filter(file -> file.exists())
.filter(file -> file.isDirectory())
.map(file -> file.listFiles(Exercises2::listFiles))
.orElse(null);
}
private static boolean listFiles(File srcFile) {
return Optional.ofNullable(srcFile).filter(file -> file != null)
.filter(file -> file.exists())
.map(file -> file.isDirectory()).orElse(false);
}
3、使用java.io.File类的list(FilenameFilter)方法,编写一个返回指定目录下、具有指定扩展名的所有文件。使用lambda表达式(而不是FilenameFilter)来实现。他会捕获闭合作用域中的哪些变量?
public static void main(String[] args) {
File[] list = getFile("E://", "txt");
Optional.ofNullable(list).map(files -> Arrays.asList(files).stream())
.ifPresent(stream -> stream.forEach(System.out::println));
}
private static File[] getFile(String srcPath, String stuffix) {
return Optional.ofNullable(srcPath).filter(path -> path != null)
.map(File::new).fil