2016-09-11 97 views
0

列表的項目我有這個名單中列出:的Java 8 - 刪除列表

List<List<ScheduleContainer>> scheduleIntervalContainersOfWeek 

,我的目標是有這個名單

List <List<ScheduleContainer>> scheduleIntervalContainersOfWeek 

與ScheduleIntervalContainers其中間隙爲空奧得假的。

因此我將第一轉換所有ScheduleContainers成ScheduleIntervalContainer(ScheduleContainer是基類SchedueIntervalContainer的),然後我將刪除所有ScheduleIntervalContainer其中ScheduleIntervalContainer的字段空隙是真實的。

我有嘗試過:

scheduleIntervalContainersOfWeek.stream().filter(...) 

,但我不知道在過濾方法lambda表達式。

目前我已經解決了這個問題是這樣的:

for (final List<ScheduleContainer> scheduleContainers : scheduleIntervalContainersOfWeek) { 
     for (final ScheduleContainer scheduleContainer : scheduleContainers) { 

      final ScheduleIntervalContainer scheduleIntervalContainer = (ScheduleIntervalContainer)scheduleContainer; 

      // if sic is absence container than continue (absence sics are shown in schedule) 
      if (scheduleIntervalContainer.getInterspace()) { 
       continue; 
      } 
+1

這有點不清楚。你能提供一個示例輸入/輸出,以及你正在使用的類的代碼嗎? – Tunaki

+0

這是我的方法:** scheduleIntervalContainersOfWeek.stream()。forEach(s - > s.stream()。map(p - >(ScheduleIntervalContainer)p).filter(r - >(r.getInterspace()== null || r.getInterspace()== false))); **我只需要ScheduleIntervalContainer,其中** r.getInterspace()== null || r.getInterspace()== false ** – quma

回答

1

試試這個:

scheduleContainers = scheduleContainers.stream() 
    .filter(sc -> !Boolean.TRUE.equals(((ScheduleIntervalContainer)sc).getInterspace())) 
    .collect(Collectors.toList()); 

注意使用Yoda condition的,以避免空校驗的需要。