Java получает размер event.getDragboard().GetFiles().stream().map(Файл::длина).toString());

#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()