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