Java Stream : Flat from Pair<K, Object[]> to Pair<K, Object>

标签 java java-stream apache-commons

我需要压缩 Pair<Application, FileObject[]> 的流, 到 Pair<Application, FileObject> 的流.

目前,我已经编码了:

List<Application> applications = this.applicationDao.findAll();
applications.stream()
    .map(app -> 
        new Pair<Application, FileObject[]>(
            app,
            this.massiveInterfaceService.getPendingDocuments(app)
        )
    );

所以,我需要的是获得 Pair<app, FileObject> 的流.

this.massiveInterfaceService.getPendingDocuments是:

public Stream<FileObject> getPendingDocuments(Application app) { /*...*/ }

有什么想法吗?

最佳答案

假设massiveInterfaceService.getPendingDocuments()返回 FileObject[] ,您可以创建这样的方法:

Stream<Pair<Application, FileObject>> flatten(Pair<Application, FileObject[]> pair) {
   return Arrays.stream(pair.getRight())
                .map(fileObject -> new Pair.of(pair.getLeft(), fileObject));
}

然后在您的流中使用它:

Stream<Pair<Application, FileObject>> stream =
   applications.stream()
        .map(app -> 
            Pair.of(app, this.massiveInterfaceService.getPendingDocuments(app)))
        .flatMap(this::flatten);

如果另一方面massiveInterfaceService.getPendingDocuments()返回 Stream<FileObject>

Stream<Pair<Application, FileObject>> stream =
   applications.stream()
        .flatMap(app -> 
            this.massiveInterfaceService
                .getPendingDocuments(app)))
                .map(fileObject -> Pair.of(app, fileObject)));

从你的问题中不清楚哪个是正确的。

关于Java Stream : Flat from Pair<K, Object[]> to Pair<K, Object>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53395437/

相关文章:

java - 在导出时提供 System.loadLibrary 的 DLL 路径

java - 使用自定义等于获取对象的重复计数

java - 使用 collect 保留 Java 流中的顺序

java - 如何在 Java 8 Stream API 中使用 Collectors.grouping 来创建 map

java - 在 Eclipse 上安装 Apache 包

Java boolean if问题

java - 一个线程不停止其他线程。即使有 volatile 变量

java - 从现有的 c 头文件和源代码生成 java 代码

JAVA FTPSClient文件列表问题

java - 可以按值的顺序迭代的映射