gpt4 book ai didi

java - 链接消费者 Java 8

转载 作者:搜寻专家 更新时间:2023-11-01 02:59:52 25 4
gpt4 key购买 nike

您好,我遇到了以下问题。假设我们有对象“Account”,这个对象 Account 是不可变的,所以随着时间的推移,我们对其执行操作,实际上是将其转换为另一种状态。例如 Account 可以变成 ClosedAccount 或 NewAccount 等等。现在在某些情况下,我的转换是反射(reflect)帐户转换为帐户但一些非常小的更改,例如“modifiedDate”。因为我的帐户本质上是不可变的,所以即使反射操作仍在创建具有更新值的新帐户。如果我的对象不是不可变的,我会使用类似的东西:

List<String> accountsIds;
accountIds.parrallelStream.map(t->NewAccount)
.map(t->Account)
.peek(t->changetheDate())
.map(t->closeAccount())
.forEach(bla bla bla)

现在的问题是 peek() 只会改变可变对象的状态。但在我的例子中,Account 是不可变的,所以即使我创建了一个新对象,这个对象也不会被进一步流式传输。

问题是是否有可能将“消费者”链接起来,使其像“映射”方法一样工作,将“消费者”的输出变成下一个“消费者”的输入。换句话说,我正在寻找适用于不可变对象(immutable对象)的“窥视”操作。

我问这个问题的原因是因为我的理解是“map”是一个转换操作,而我想执行更像是一个Action的东西。它用作转换操作只是因为我使用的是不可变对象(immutable对象),但如果我使用的是可变对象,它就只是一个 Action 。

最佳答案

您可能正在尝试解决一个不存在的问题。我认为使用 map() 对对象进行任何更改都是完全正常的,无论更改有多小。

我的理解是像 map()peek() 这样的操作背后没有语义意义,您可以将它们中的任何一个用于任何适合的任务.

peek() 通常用于调试:它允许您在不使用终端操作和破坏流的情况下记录流中的每个项目。 map() 在您需要对对象执行某些操作并将它们向前传递时使用。

另外,想一想:Consumer 接口(interface)中的方法只有一个输入参数,它不返回任何值。如果您的输入参数是不可变的,那么如果不使用任何肮脏的技巧,就不可能从此方法返回任何值。

关于java - 链接消费者 Java 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38418995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com