我有一个ScheduleContainer
个对象的列表,在流中,每个元素都应该被转换为ScheduleIntervalContainer
类型。有办法做到这一点吗?
final List<ScheduleContainer> scheduleIntervalContainersReducedOfSameTimes
final List<List<ScheduleContainer>> scheduleIntervalContainerOfCurrentDay = new ArrayList<>(
scheduleIntervalContainersReducedOfSameTimes.stream()
.sorted(Comparator.comparing(ScheduleIntervalContainer::getStartDate).reversed())
.filter(s -> s.getStartDate().withTimeAtStartOfDay().isEqual(today.withTimeAtStartOfDay())).collect(Collectors
.groupingBy(ScheduleIntervalContainer::getStartDate, LinkedHashMap::new, Collectors.<ScheduleContainer> toList()))
.values());
答案 0 :(得分:20)
这是可能的,但是您应该首先考虑是否需要进行转换,或者只是函数应该从一开始就对子类类型进行操作。
向下转换需要特别小心,您应首先检查给定的对象是否可以通过以下方式进行投放:
flatMap
然后你可以通过以下方式很好地施展它:
object instanceof ScheduleIntervalContainer
所以,整个流程应该如下:
(ScheduleIntervalContainer) object
答案 1 :(得分:17)
你的意思是你想要投射每个元素吗?
scheduleIntervalContainersReducedOfSameTimes.stream()
.map(sic -> (ScheduleIntervalContainer) sic)
// now I have a Stream<ScheduleIntervalContainer>
如果你觉得它更清楚,你可以使用方法参考
.map(ScheduleIntervalContainer.class::cast)
在表演笔记上;第一个示例是非捕获lambda,因此它不会产生任何垃圾,但第二个示例是捕获lambda,因此每次分类时都可以创建一个对象。