java - 如何在 Java 8 中的两个流之间进行搜索

标签 java java-8 java-stream

如果我有 2 个 Streams,就像下面所示的方法一样

public Stream<Transaction> getPendingTransaction(Stream<PendingTransaction> pendingTransactionStream,Stream<ProcessedTransaction> processedTransactionStream){ }

并且我想根据某些标准(如

if transaction.getId() is same for an Transaction object present in pendingTransactionStream and processedTransactionStreamthen that object is same and we can collect them in a list.

我试过这样做但是它给出了错误

processedTransactionStream
        .filter( (processedTransaction)->
        {
            pendingTransactionStream.anyMatch(s->s.getTransactionId().equals(processedTransaction.getTransactionId()) );
        } 
        ).collect(Collectors.toList());

最佳答案

嗯,您不能多次使用 pendingTransactionStream Stream。您可以将其转换为交易 ID 的 List(或者更好的是 Set),以在 filter 方法中使用。

Set<String> pending = pendingTransactionStream.map(PendingTransaction::getTransactionId)
                                              .collect(Collectors.toSet());
List<ProcessedTransaction> processed = 
    processedTransactionStream.filter(pt -> pending.contains(pt.getTransactionId()))
                              .collect(Collectors.toList());

关于java - 如何在 Java 8 中的两个流之间进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54194137/

相关文章:

java - 如何在 Struts 2 中使 fileUpload 参数动态化

java - 如何解释我的堆栈跟踪?

java - 如何从 int 流中获取 int 类型的平均值?

java - anyMatch 是否像 filter + findFirst 那样具有确定性?

java - 查找 JPA 的最新条目

java - as400 box中执行时如何判断Java代码正在执行的库列表(rpgle程序调用)

实体字段中的 Java 8 可选

google-app-engine - 在 Google App Engine Java 8 中加载字体

java - Java 8 中的多个空值检查

java - Guava 的 Streams::findLast 实现