使用lambdas排除列表条目

时间:2015-11-29 07:25:54

标签: java java-8 java-stream

我有两个相同类型的列表:

final List<MyType> myCurrentList = ... 
final List<MyType> listFromDatabase = ...

MyType看起来像这样:

class MyType {

   private DateTime startDate; 
   ...
}

现在,我将获得MyType的所有myCurrentList个对象,其中startDate中没有相同的listFromDatabase条目。

1 个答案:

答案 0 :(得分:2)

首先,您应该从数据库中收集所有startTime,最好收集到Set(因为您只关心那里的日期,而不是多次出现或他们的订单):< / p>

Set<DateTime> datesFromDatabase =
    listFromDatabase.stream()
                    .map(MyTime::getStartTime)                        
                    .collect(Collectors.toSet());

然后,您可以流式传输当前列表,并仅保留数据库中没有日期的对象:

List<MyType> filteredList = 
    myCurrentList.stream()
                 .filter(x -> !datesFromDatabase.contains(x.getStartTime())
                 .collect(Collectors.toList());