我目前正在使用多層xml數據,並且我想將不同的功能應用於不同層上的不同節點。使用Java 8將不同的函數應用於多層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對象,是否有創建一個List<Transaction>
的方法可以將transactionGroomIds和transactionsCupIds存儲在一個流中?
進一步澄清:
我想這兩個IDS插入通過構造一個交易對象。有沒有在流中插入代碼的方法:
Transaction newTransaction = new Transaction(transactionsGroomIds, transactionsCupIds)
謝謝。
目前還不清楚您是否想從這兩個id列表中創建一個Transaction對象,或者您是否想創建一個Transaction對象列表,在這種情況下,根本不清楚哪些id這兩個列表將對應於每個新的'Transaction'對象。也許是你需要一個新郎ID和一個杯子ID來創建一個'Transacion'對象?請澄清。 –
聽起來像你正在尋找番石榴['Streams.zip()'](https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/collect/Streams.html #拉鍊java.util.stream.Stream-java.util.stream.Stream-java.util.function.BiFunction-)。 – shmosel
@FedericoPeraltaSchaffner對不起,我錯了,但是我試圖獲得一個新郎ID和一個杯子ID來創建一個事務對象。 – 000000000000000000000