jav*_*ous 7 java java-8 java-stream
我使用以下表达式来过滤生日符合条件的人员列表.
List<Person> matchingPeople = people.stream()
.filter(p -> dateFilters.stream()
.anyMatch(df ->
numOfDaysBetween(p.getBirthDate(), df.getDate()) < df.getDiffRange()
)
)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
Collectors.toList()返回符合条件的人员列表.我想知道如何捕获为调试/记录目的而被删除的人员列表.一种可能的方法是通过另一个过滤器运行列表,但这将是低效的.我们可以在同一个过滤器中进行吗?
Era*_*ran 10
是的,您可以在同一个filter电话中执行此操作:
List<Person> matchingPeople =
people.stream()
.filter(p -> {
if (dateFilters.stream()
.anyMatch(df -> numOfDaysBetween(p.getBirthDate(), df.getDate()) < df.getDiffRange()
))
{
return true;
} else {
//you can add here code to log elements that don't pass the filter
//or you can add these elements to an external List
return false;
}
})
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
另一种方法是根据过滤谓词将输入列表分为两个列表:
Map<Boolean, List<Person>> partition =
people.stream()
.collect(Collectors.partitioningBy(p -> <same code as in your filter method call>));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1869 次 |
| 最近记录: |