您好,我遇到以下问题。假设我们有对象“Account”,该对象 Account 是不可变的,因此随着时间的推移,我们对其执行操作,实际上是将其转换为另一种状态。例如Account可以变成ClosedAccount或NewAccount等等。现在,在某些情况下,我的转换是反射性的,帐户已转换为帐户,但一些非常小的内容发生了更改,例如“modifiedDate”。因为我的帐户本质上是不可变的,所以即使反射操作仍在创建具有更新值的新帐户。如果我的对象不是不可变的,我会使用类似的东西:
List<String> accountsIds;
accountIds.parrallelStream.map(t->NewAccount)
.map(t->Account)
.peek(t->changetheDate())
.map(t->closeAccount())
.forEach(bla bla bla)
现在的问题是 peek() 只会更改可变对象的状态。但就我而言,帐户是不可变的,因此即使我创建一个新对象,该对象也不会进一步流式传输。
问题是是否有可能以这样的方式链接“消费者”,使它们像“映射”方法一样工作,将“消费者”的输出变成下一个“消费者”的输入。换句话说,我正在寻找适用于不可变对象的“查看”操作。
我问这个问题的原因是因为我的理解是“map”是一个转换操作,而我想执行更像是一个Action的东西。它作为转换操作起作用只是因为我正在使用不可变对象,但如果我使用可变对象,它就只是一个动作。
您可能正在尝试解决一个不存在的问题。我认为对对象进行任何更改都是完全正常的map()
无论变化有多么小。
我的理解是,像这样的操作背后没有语义意义map()
or peek()
,您可以使用它们中的任何一个来完成任何适合的任务。
peek()
通常用于调试:它允许您记录流中的每个项目,而无需使用终端操作并销毁流。map()
当您需要对对象执行某些操作并将它们向前传递时使用。
另外,想一想:Consumer
接口只有一个输入参数,并且不返回任何值。如果您的输入参数是不可变的,则无法在没有任何肮脏技巧的情况下从此方法返回任何值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)