Есть несколько проблем с кодом, который вы отправили.
- Вы звоните
stream.stream()
- Класс
Stream
не имеет метода stream()
. Не имеет смысла иметь такой метод, потому что это уже поток.
- Вы звоните
x.getName()
- На данный момент
x
- это Path
, у которого нет getName()
метода. Вы можете использовать getFileName()
, который возвращает Path
, или toString()
, который возвращает путь в виде строки, или комбинировать два, чтобы получить только имя файла в виде строки.
- Вы присваиваете
List<String> collect
результату Collection.toArray()
.
- Этот метод возвращает
Object[]
.
- Вы используете
collect(Collectors.toList())
перед вызовом toArray()
.
- Класс
Stream
имеет метод toArray()
, поэтому нет необходимости сначала собирать его в список, если массив является желаемым конечным результатом.
- Вы используете
toArray()
, который возвращает Object[]
(как для Stream
, так и Collection
)
- Вы хотите
String[]
, что означает, что, поскольку нет необходимости сначала собирать деньги, вам нужно позвонить Stream.toArray(IntFunction)
.
- Вы используете
stream
вне блока try
.
- Поскольку
stream
является локальным для блока try
, его нельзя использовать за пределами блока try
. У вас также нет причин использовать его за пределами блока, поскольку вам нужен только результат String[]
.
- Вы пытаетесь сделать что-то вроде
stream[]
.
- A
Stream
не является массивом и не может быть доступен как один. Кроме того, Stream
- это не контейнер, а трубопровод; пытаться получить доступ к определенным элементам в нем не имеет смысла.
- Это также относится к
stream.length
, поскольку Stream
не имеет поля length
(опять же, потому что это не массив).
Исправляя эти проблемы, ваш код может выглядеть примерно так (на основе текущей формы вашего кода, поскольку я не уверен, что именно вы пытаетесь сделать):
String[] result;
try (Stream<Path> stream = Files.walk(start, Integer.MAX_VALUE)) {
result = stream.map(Path::toString)
.filter(s -> s.endsWith(".txt"))
.sorted()
.toArray(String[]::new);
}
for (int i = 0; i < result.length; i++) {
// do something
}
Вы также можете рассмотреть возможность использования Files.find(Path,int,BiPredicate,FileVisitOption...)
и / или PathMatcher
.