2015-11-23 2 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()); 

EDIT:

Если existingSchedulePresences может содержать null элементы, вы можете фильтровать их, как предложил Алексис:

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

Есть ли любая возможность справиться с этим, когда ** sp ** имеет значение null? – quma

+0

@ user3318489 Да, вы можете изменить выражение лямбда внутри 'flatMap' на sp-> sp! = Null? Sp.getScheduleIntervalContainersForDate (dateTimeToNavigate, false, false) .stream(): Stream.empty() – Eran

+2

@Eran Вы бы лучше добавить '.filter (Objects :: nonNull)' непосредственно перед этим. –

Смежные вопросы