我有一个由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解决方案,因为它们并不真正属于一个整体。