2017-04-19 3 views
2

現在、複数レイヤーのXMLデータを扱っています。異なるレイヤーの異なるノードに異なる機能を適用したいと考えています。Java 8 Streamを使用して複数のレイヤーのXMLデータに異なる機能を適用する

は現在、私は別の層のノード値を保存することができます。第二のリストが深い二層を行くことによって作成されたのに対し、

List<Integer> transactionsGroomIds = 
    transactions.parallelStream() 
       .map(node -> node.children().findChildWithName("GROOM")) 
       .filter(t -> t.getType() == Transaction.GROCERY) 
       .sorted(comparing(Transaction::getValue).reversed()) 
       .map(Transaction::getId) 
       .collect(toList()); 

List<Integer> transactionsCupIds = 
    transactions.parallelStream() 
       .map(node -> node.children().findChildWithName("ACCESS")) 
       .map(node -> node.children().findChildWithName("CUP")) 
       .filter(t -> t.getType() == Transaction.GROCERY) 
       .sorted(comparing(Transaction::getValue).reversed()) 
       .map(Transaction::getId) 
       .collect(toList()); 

あなたが見ることができるように、最初のリストは、深い一つの層を行くことによって作成されます。

結合リストを作成する方法はありますか?たとえば、2つのフィールド(transactionsGroomIdsとtransactionsCupIds)を持つTransactionオブジェクトを作成した場合、transactionsGroomIdsとtransactionsCupIdsの両方を1つのストリームに格納できるList<Transaction>を作成する方法はありますか?

さらに明確化:

私はコンストラクタでトランザクションオブジェクトに両方のIDを挿入します。ストリームにコードを挿入する方法はありますか:

Transaction newTransaction = new Transaction(transactionsGroomIds, transactionsCupIds) 

ありがとうございました。

+1

これらの2つのIDリストから1つの「Transaction」オブジェクトを作成したいのか、何らかの形で 'Transaction'オブジェクトのリストを作成したいのかどうかは明らかではありません。両方のリストは、新鮮な新しい「トランザクション」オブジェクトに対応する。 Transacionオブジェクトを作成するには、1つのgroom idと1つのcup idが必要なのでしょうか?どうか明らかにしてください。 –

+0

Guavaの['Streams.zip()'](https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/collect/Streams.html)を探しているようです#zip-java.util.stream.Stream-java.util.stream.Stream-java.util.function.BiFunction-)。 – shmosel

+0

@FedericoPeraltaSchaffner混乱して申し訳ありませんが、はい、私は1つのgroom idと1つのcup idを取得してTransactionオブジェクトを作成しようとしています。 – 000000000000000000000

答えて

1

Stream.concatは、2つのストリームを取り込み、それらを連結します。あなたは、あなたが好きなように結合されたストリームで行うことができます。

+0

ありがとうございます。しかし、私の場合、両方のidをコンストラクタを介してTransactionオブジェクトに挿入したいと思います。ストリームにコードを挿入する方法はありますか?Transaction newTransaction = new Transaction(transactionsGroomIds、transactionsCupIds)? – 000000000000000000000

+1

これらの2つのことがストリームの出力であるとすれば、私はnoと言うつもりです。 –

関連する問題