使用Java 8 Stream

时间:2017-04-19 20:56:15

标签: java xml java-8 java-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());

如您所见,第一个列表是通过深入一层创建的,而第二个列表是通过深层两层创建的。

有没有办法制作组合清单?例如,如果我创建一个具有两个字段(transactionsGroomIds和transactionsCupIds)的Transaction对象,是否有办法创建一个能够在一个流中存储transactionsGroomIds和transactionsCupIds的List<Transaction>

进一步澄清:

我想通过构造函数将两个id插入到Transaction对象中。流中是否有插入代码的方法:

Transaction newTransaction = new Transaction(transactionsGroomIds, transactionsCupIds) 

感谢。

1 个答案:

答案 0 :(得分:1)

Stream.concat将采用两个流并将它们连接起来。然后,您可以根据需要使用组合流。