Рекомендуется ли использовать потоки Java в POJO в качестве атрибутов

#java #list #collections #java-stream

#java #Список #Коллекции #java-stream

Вопрос:

Я только что увидел это впервые, и я хотел бы знать, является ли это хорошей практикой или, как всегда, это зависит.

Использование потоков в качестве атрибутов в домене вместо списка.

 public class MyDomain {

    Integer id;
    Stream<SubDomain> subDomains;

}
  

Комментарии:

1. Нет, это не очень хорошая идея, если каждый поток предназначен только для одноразовой обработки, а не для фактического хранения данных.

Ответ №1:

Нет, это не очень хорошая практика. Потоки были созданы для поддержки операций функционального стиля над потоками элементов (см. Официальный Javadoc), но не для их сохранения.

Это еще одна хорошая цитата в официальном Javadoc:

Потоки отличаются от коллекций несколькими способами: нет хранилища. Поток — это не структура данных, в которой хранятся элементы; вместо этого он передает элементы из источника, такого как структура данных, массив, функция генератора или канал ввода-вывода, через конвейер вычислительных операций.

Поэтому не используйте его как постоянную коллекцию.

Ответ №2:

Это не очень хорошая идея, поток может быть использован один раз. Наличие его в качестве поля в объекте сделает вероятным, что его необходимо использовать более одного раза. Чтобы иметь возможность это сделать, вам нужно сохранить класс коллекции (например, a List ) и вызывать его stream() метод, когда вам нужно получить доступ к его содержимому в виде потока.