#java
#java
Вопрос:
Я хотел бы получить размер моего файла :
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:
Вызывая:
event.getDragboard().getFiles().stream().map(File::length).toString());
вы конвертируете Stream<Long>
в String
.
На самом деле вы хотите преобразовать все Long
в потоке в String
, а затем объединить их, как вы сделали с path или name.
Как преобразовать 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
?
В случае, если вы хотите получить sum
[1] из всех Long
файлов в потоке, вы можете использовать sum
функцию LongStream
.
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()