В настоящее время мне приказывают считать все файлы .sql, которые находятся на некоторых серверах.Вручную решить эту очень базовую задачу не вариант, вместо этого я написал некоторый код, использующий SimpleFileVisitor<Path>
и сохраняющий все найденные sql-файлы вместе с его родительским путем в Map<Path, List<Path>>
.
Теперь я хочу получить общее количество найденных файлов sql независимо от их расположения.У меня получилось работать с расширенным циклом for
(почти классическим способом):
public int getTotalAmountOfSqlFiles(Map<Path, List<Path>> sqlFilesInDirectories) {
int totalAmount = 0;
for (Path directory : sqlFilesInDirectories.keySet()) {
List<Path> sqlFiles = sqlFilesInDirectories.get(directory);
totalAmount += sqlFiles.size();
}
return totalAmount;
}
Вопрос теперь, как я могу сделать то же самое с помощью потокового API?
Я не смог заставить работать скомпилированный код, который явно не делает неправильно.
Следующая строка выглядит как хорошая идея для меня, но не длякомпилятор, к сожалению.
totalAmount = sqlFilesInDirectories.entrySet().stream().map(List::size).sum();
Компилятор говорит
Невозможно определить тип аргумента (ов) для <R> map(Function<? super T,? extends R>
Кто-нибудь знает, что яя делаю что-то не так (и, может быть, предоставил какое-нибудь образованное потоковое API с использованием решения)?