Java 直播:从 Pair<K, Object[]> 到 Pair<K, Object> 持平
Java Stream: Flat from Pair<K, Object[]> to Pair<K, Object>
我需要将 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()
returns 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()
returns一个Stream<FileObject>
Stream<Pair<Application, FileObject>> stream =
applications.stream()
.flatMap(app ->
this.massiveInterfaceService
.getPendingDocuments(app)))
.map(fileObject -> Pair.of(app, fileObject)));
从你的问题中不清楚哪个是正确的。
您可以简单地调用 flatMap
,根据 getPendingDocuments
的结果创建一个流。这是因为 getPendingDocuments
已经 returns 一个流。
applications.stream()
.flatMap(app -> this.massiveInterfaceService
.getPendingDocuments(app)
.map(doc -> Pair.of(app, doc));
我需要将 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()
returns 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()
returns一个Stream<FileObject>
Stream<Pair<Application, FileObject>> stream =
applications.stream()
.flatMap(app ->
this.massiveInterfaceService
.getPendingDocuments(app)))
.map(fileObject -> Pair.of(app, fileObject)));
从你的问题中不清楚哪个是正确的。
您可以简单地调用 flatMap
,根据 getPendingDocuments
的结果创建一个流。这是因为 getPendingDocuments
已经 returns 一个流。
applications.stream()
.flatMap(app -> this.massiveInterfaceService
.getPendingDocuments(app)
.map(doc -> Pair.of(app, doc));