2015-11-23 21 views
-1

我運行包含列表的對象列表,並將所有這些列表合併到新列表中。 我試圖用Java 8來做,但沒有成功。父列表中的列表

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); 
} 

回答

0

flatMap存在這方面的:

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

編輯:

如果existingSchedulePresences可能包含null元素,可以過濾它們,亞歷克西斯建議:

List<ScheduleIntervalContainer> scheduleIntervalContainers = 
    existingSchedulePresences.stream() 
          .filter(Objects::nonNull) 
          .flatMap(sp->sp.getScheduleIntervalContainersForDate(dateTimeToNavigate, false, false).stream()) 
          .collect(Collectors.toList()); 
+0

有** sp **爲空時處理它的任何可能性? – quma

+0

@ user3318489是的,你可以將'flatMap'內的lambda表達式改爲sp-> sp!= null?sp.getScheduleIntervalContainersForDate(dateTimeToNavigate,false,false).stream():Stream.empty() – Eran

+2

@Eran你會在之前更好地添加'.filter(Objects :: nonNull)'。 –