有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java获取事件的大小。getDragboard()。getFiles()。流()。映射(文件::长度)。toString());

我想知道我文件的大小:

event.getDragboard().getFiles().stream().map(File::getName).collect(Collectors.joining("\n")),               
event.getDragboard().getFiles().stream().map(File::getPath).collect(Collectors.joining("\n")),
event.getDragboard().getFiles().stream().map(File::length).toString());

问题是,我得到了正确的名称和路径,但没有大小:

java.util.stream.ReferencePipeline$3@5b41d7e4

共 (1) 个答案

  1. # 1 楼答案

    致电:

    event.getDragboard().getFiles().stream().map(File::length).toString());
    

    您正在将Stream<Long>转换为String

    实际上,您想要的是将流中的每个Long转换为String,然后像使用路径或名称一样连接它们

    如何将Stream<Long>转换为String

    getFiles().stream()
              .map(File::length) // Stream<Long>
              .map(String::valueOf) // Stream<String>
              .collect(Collectors.joining("\n")); // String
    

    函数String.valueOf()接受一个Long并返回它的String表示,因此我们可以使用这个函数从Long转换为String

    如何将Stream<Long>转换为Long

    如果您想获得流中所有Long中的sum[1],可以使用LongStreamsum函数

    getFiles().stream()
              .map(File::length)  // Stream<Long>
              .mapToLong(Long::longValue) // LongStream
              .sum(); // Long
    

    通过调用mapToLong,我们将Stream<Long>转换为LongStream


    [1]https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/stream/LongStream.html#sum()