相关疑难解决方法(0)

Java 8中的::(双冒号)运算符

我正在探索Java 8源代码,发现代码的这一特定部分非常令人惊讶:

//defined in IntPipeline.java
@Override
public final OptionalInt reduce(IntBinaryOperator op) {
    return evaluate(ReduceOps.makeInt(op));
}

@Override
public final OptionalInt max() {
    return reduce(Math::max); //this is the gotcha line
}

//defined in Math.java
public static int max(int a, int b) {
    return (a >= b) ? a : b;
}
Run Code Online (Sandbox Code Playgroud)

Math::max什么样的方法指针?普通static方法如何转换为IntBinaryOperator

java java-8

912
推荐指数
8
解决办法
31万
查看次数

如何在Java中快速检索目录列表?

假设一个非常简单的程序列出了给定目录的所有子目录.声音够简单?除了列出Java中所有子目录的唯一方法是使用FilenameFilterFile.list()结合使用.

这适用于简单的情况,但是当文件夹说出150,000个文件和2个子文件夹时,它在那里愚蠢地等待45秒,遍历所有文件并测试file.isDirectory().是否有更好的方法列出子目录?


PS.对不起,请保存有关在同一目录中包含太多文件的讲座.我们的现场环境将此作为要求的一部分.

java filesystems performance file-io

20
推荐指数
7
解决办法
3万
查看次数

使用Java 8流仅列出特定深度的文件夹

考虑到Java 8中存在"新" 流API,我可以使用Files.walk迭代文件夹.如果使用此方法或者深度= 2,我怎么才能获取给定目录的子文件夹?

我目前有这个工作示例,遗憾的是还将根路径打印为所有"子文件夹".

Files.walk(Paths.get("/path/to/stuff/"))
     .forEach(f -> {
        if (Files.isDirectory(f)) {
            System.out.println(f.getName());
        }
     });
Run Code Online (Sandbox Code Playgroud)

因此,我恢复了以下方法.它将文件夹存储在内存中,然后需要处理存储的列表,我会避免使用lambdas.

File[] directories = new File("/your/path/").listFiles(File::isDirectory);
Run Code Online (Sandbox Code Playgroud)

java directory traversal java-8

5
推荐指数
3
解决办法
1291
查看次数

标签 统计

java ×3

java-8 ×2

directory ×1

file-io ×1

filesystems ×1

performance ×1

traversal ×1