在 POJO 中使用 Java Streams 作为属性是一个好习惯吗

Fra*_*ira 1 java collections list java-stream

我只是第一次看到这个,我想知道这是一个很好的做法还是一如既往地视情况而定。

使用流作为域中的属性而不是列表。

public class MyDomain {

    Integer id;
    Stream<SubDomain> subDomains;

}
Run Code Online (Sandbox Code Playgroud)

Mil*_*lgo 9

不,这不是一个好习惯。创建流是为了支持对元素流的函数式操作(请参阅官方 Javadoc),但不是为了持久化它们。

这是官方 Javadoc 中的另一个很好的引用:

流在几个方面与集合不同: 没有存储。流不是存储元素的数据结构;相反,它通过计算操作的管道传送来自数据结构、数组、生成器函数或 I/O 通道等源的元素。

所以不要将它用作持久集合。


Mar*_*eel 7

这不是一个好主意,一个流可以被消费一次。将它作为对象中的一个字段将使其可能需要多次消费。为了能够做到这一点,您需要存储集合类(例如 a List),并stream()在需要以流的形式访问其内容时调用其方法。