我有一個由Spring Data JPA Repository返回的Java 8流。我不認爲我的用例是非常不尋常的,有兩個(實際上是3個),我想收集的結果流中的集合。Java 8 JPA存儲庫流產生兩個(或更多)結果?
Set<Long> ids = // initialized
try (Stream<SomeDatabaseEntity> someDatabaseEntityStream =
someDatabaseEntityRepository.findSomeDatabaseEntitiesStream(ids)) {
Set<Long> theAlphaComponentIds = someDatabaseEntityStream
.map(v -> v.getAlphaComponentId())
.collect(Collectors.toSet());
// operations on 'theAlphaComponentIds' here
}
我需要拉出'Beta'對象並對這些對象做一些工作。所以我認爲我必須重複代碼,這似乎是完全錯誤的:
try (Stream<SomeDatabaseEntity> someDatabaseEntityStream =
someDatabaseEntityRepository.findSomeDatabaseEntitiesStream(ids)) {
Set<BetaComponent> theBetaComponents = someDatabaseEntityStream
.map(v -> v.getBetaComponent())
.collect(Collectors.toSet());
// operations on 'theBetaComponents' here
}
這兩個代碼塊在處理中是連續發生的。是否有乾淨的方式讓這兩個集合只處理一次流?注意:我不想要一些構成Alpha和Beta版包裝類的kludgy解決方案,因爲它們並不真正屬於一個整體。