Использование try с ресурсами для потока Java Files.walk, созданного в отдельном методе.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Использование try с ресурсами для потока Java Files.walk, созданного в отдельном методе.

Сообщение Anonymous »

Работая над проектом, я столкнулся с ситуацией, которую не знаю, как правильно решить. Я не уверен, что мое решение является лучшим, которое я мог бы использовать. Но позвольте мне представить проблему (я воспроизвел ее настолько просто, насколько мог).
Есть класс (который написан неправильно), который просто получает имена файлов из каталога:

Код: Выделить всё

public class StreamTest
{
public List getList(Path dir) {
return getStream(dir)
.map(filename -> filename.toString())
.collect(Collectors.toList());

}

private Stream
 getStream(Path dir)
{
if (Files.exists(dir)) {

try {
Stream stream = Files.walk(dir, 1);

return stream
.filter(Files::isRegularFile)
.map(dir::relativize);
} catch (IOException e) {
System.out.println("Error");
}
}

return null;
}
}
и Main.class

Код: Выделить всё

public class Main {
public static void main(String[] args) {

Path dir = Paths.get("C:\\Projects\\Tests\\Walk");

StreamTest streamTest = new StreamTest();

List list = streamTest.getList(dir);

System.out.println(list);
}
}
Это работает, но понимаете, в чем проблема? Files.walk(dir, 1) следует запускать с помощью try-with-resources.
Но когда я заменяю:

Код: Выделить всё

try {
Stream
 stream = Files.walk(dir, 1);
с

Код: Выделить всё

try (Stream
 stream = Files.walk(dir, 1)) {

Я получаю IllegalStateException.
А теперь вопрос:
Правильен ли этот подход на все? Я имею в виду получение потока из метода и работу над ним? Но как правильно использовать try-with-resources в такой ситуации?
Обходным решением является возврат списка некоторого сопоставленного типа (например, String) вместо Stream из getStream и работать с ним в методе getList, но мне любопытно, есть ли хороший ответ на заданный вопрос.
Конечно, я могу выполнить всю работу одним методом, но гипотетически я может вызвать getStream из нескольких других методов.

Подробнее здесь: https://stackoverflow.com/questions/790 ... arate-meth
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»