Я не знаю, как изменить свою программу, чтобы увидеть десять самых больших файлов - PullRequest
0 голосов
/ 18 апреля 2019

Мне нужно запрограммировать некоторую статистику, например, подсчет файлов и т. Д. Но у меня возникла проблема с одной из задач: написать код для определения 10 самых больших файлов.

Моя проблема в том, что я не знаю, с чего начать.У меня есть код, чтобы получить самый большой файл.Но как я могу получить десять самых больших файлов?Вот один класс, который показывает самый большой файл.

@Override
public String getDescription() {
   return "find largest file";
}

@Override
public void printResults(List<File> files) {
    File largest = files.get(0);
    for (File f : files)
    if (f.length() > largest.length())
    largest = f;
    System.out.println("Largest file: " + largest.getName() + " (" + largest.length() + " bytes)");
}

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Вы можете отсортировать файлы по размеру файла и получить первые 10 элементов.Обратите внимание, что с этим кодом вы получите странные результаты, если какой-либо из ваших файлов действительно большой:

@Override
public void printResults(List<File> files) {
    files.sort((file1,file2) -> (int)(file1.length()-file2.length())); // This will NOT work correctly if any of the files are over 2.7 GB in size.
    List<File> largest = files.subList(0, files.size() > 10 ? 10 : files.size());
    System.out.println("Largest files:");
    for(File file : largest) {
        System.out.println(file.getName() + " (" + file.length() + " bytes)");
    }
}
0 голосов
/ 18 апреля 2019

Вы можете использовать Java Stream API для сортировки и ограничения списка файлов:

files.stream()
        .sorted(Comparator.comparingLong(File::length).reversed())
        .limit(10)
        .forEach(f -> System.out.println(f.getName() + " (" + f.length() + " bytes)"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...