【发布时间】:2017-08-31 12:03:58
【问题描述】:
我有一个由 Spring Data JPA 存储库返回的 Java 8 流。我不认为我的用例有那么不寻常,有两个(在我的情况下实际上是 3 个),我希望收集的结果流中的集合。
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 组成包装类的笨拙解决方案,因为它们并不真正属于一起。
【问题讨论】:
标签: java-8 spring-data spring-data-jpa java-stream