2016-07-17 19 views
4

こんにちは私は次の問題を抱えています。私たちはオブジェクト "Account"を持っていると言うことができます。このオブジェクトAccountは不変なので、実際には別の状態に変換するために余計なおしてアクションを実行します。たとえば、AccountはClosedAccountやNewAccountなどになります。今や私の移行は反映されていることがあります。アカウントはアカウントに変換されますが、非常に小さいものは例えば "modifiedDate"のように変更されます。私のアカウントは本質的なものなので、反射的な操作でさえも、更新された値を持つ新しいアカウントが作成されます。私のオブジェクトは不変ではない場合、私のようなものを使用しているだろう:連鎖消費者Java 8

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

さて問題は、PEEKは()のみ変更可能なオブジェクトの状態を変更するということです。しかし、私の場合、アカウントは不変ですので、私が新しいオブジェクトを作成しても、このオブジェクトはそれ以上ストリーミングされません。

「Consumer」の出力が「Consumer」の入力になる「マップ」メソッドのように機能するように、「Consumers」を連鎖させることは可能ですか?言い換えれば、私は不変オブジェクトで動作する "peek"操作を探しています。

私の理解は、私はより多くのアクションのような何かを実行したい一方で、「マップ」は、変換操作であるということですので、私はこの質問を求めていた理由です。私は不変オブジェクトで作業しているので、変換操作としてのみ機能しますが、変更可能なオブジェクトを使用していた場合、それは単なるアクションに過ぎません。

+4

はい、 'map'はあなたが望むものです。 –

+0

多分それは単なる言語のものですが、どういうわけか私は "マップ"と "アクション"を結びつけません。 –

+1

あなたが描いていることは、実際には行動ではないと思います。 1つの不変オブジェクトを取得し、(おそらく新しい、わずかに変更された)不変オブジェクトを取得しています。 –

答えて

2

おそらく存在しない問題を解決しようとしています。私は、変更がどれほど小さいかにかかわらず、map()でオブジェクトに何らかの変更を行うのは完全に正常であると思います。

map()またはpeek()のような操作の意味の意味がなく、どちらのタスクでもどちらでも使用できます。

peek()

は、多くの場合、デバッグに使用されています。それはあなたが端末操作を使用して、ストリームを破壊することなく、ストリーム内のすべての項目を記録することができます。 map()は、オブジェクトで何かをして前方に渡す必要があるときに使用されます。

また、それについて考える:Consumerインターフェイスのメソッドには1つの入力パラメータがあり、値を返さない。入力パラメータが不変の場合、このメソッドから値を返すことは不可能です。

+0

私は文の後ろに隠れている探していたと思います、私はすべての時間は、セマンティックな意味のいくつかの並べ替えを探していた「マップ()およびPEEK()のような操作の背後にはセマンティックな意味がありません」。 –

関連する問題