Java 父列表中的列表

Java 父列表中的列表,java,lambda,java-8,Java,Lambda,Java 8,我运行了一个包含列表的对象列表,并将所有这些列表合并到一个新列表中。 我曾尝试用Java8来实现它,但没有成功 final List<ScheduleIntervalContainer> scheduleIntervalContainers = new ArrayList<>(); for (final Iterator<SchedulePresence> iterator = existingSchedulePresences.iterator(); ite

我运行了一个包含列表的对象列表,并将所有这些列表合并到一个新列表中。 我曾尝试用Java8来实现它,但没有成功

final List<ScheduleIntervalContainer> scheduleIntervalContainers = new ArrayList<>();
for (final Iterator<SchedulePresence> iterator = existingSchedulePresences.iterator(); iterator.hasNext();) {
    final SchedulePresence schedulePresence = iterator.next();
    final List<ScheduleIntervalContainer> sics = schedulePresence.getScheduleIntervalContainersForDate(dateTimeToNavigate, false,
        false);
    scheduleIntervalContainers.addAll(sics);
}
final List scheduleIntervalContainers=new ArrayList();
for(final Iterator Iterator=existingSchedulePresence.Iterator();Iterator.hasNext();){
final SchedulePresence SchedulePresence=迭代器.next();
最终列表sics=schedulePresence.GetScheduleIntervalContainerForDate(dateTimeToNavigate,false,
假);
scheduleIntervalContainers.addAll(sics);
}

flatMap
就是为了这个目的而存在的:

List<ScheduleIntervalContainer> scheduleIntervalContainers =
    existingSchedulePresences.stream()
                             .flatMap(sp->sp.getScheduleIntervalContainersForDate(dateTimeToNavigate, false, false).stream())
                             .collect(Collectors.toList());

sp为空时是否有可能处理它?@user3318489是的,您可以将
flatMap
中的lambda表达式更改为sp->sp=null?sp.getScheduleIntervalContainerForDate(dateTimeToNavigate,false,false).stream():stream.empty()@Eran您最好在前面添加
.filter(Objects::nonNull)
List<ScheduleIntervalContainer> scheduleIntervalContainers =
    existingSchedulePresences.stream()
                             .filter(Objects::nonNull)
                             .flatMap(sp->sp.getScheduleIntervalContainersForDate(dateTimeToNavigate, false, false).stream())
                             .collect(Collectors.toList());