我正在尝试使用流编写 Java lambda 表达式来执行以下代码的操作。给定一个人员列表和一个DateFilter 列表,从人员列表中删除出生日期与DateFilter 列表中某个范围内的任何日期相匹配的任何人员。
List<Person> people = getPerson();
List<DateFilter> dateFilters = getDateFilters();
List<Person> filteredPersons = new ArrayList<>();
for(Person p : people){
boolean isWithinRange = false;
for(int i = 0; i < dateFilters.size() && !isWithinRange; i++){
DateFilter dateFilter = dateFilters.get(i);
if(numOfDaysBetween(p.getBirthDate(),dateFilter.getDate()) < dateFilter.getDiffRange()){
isWithinRange = true;
}
}
if(!isWithinRange){
filteredPersons.add(p);
}
}
有没有简化的方法来做到这一点?
谢谢
最佳答案
鉴于您的要求:
Given a List of Person and a List of DateFilter, remove any person from the persons list whose birthdate matches any of the dates withing a range in the DateFilter list.
听起来您的原始 people
列表的可变性不是问题。考虑到这一点,您可以使用 removeIf
函数简化您的代码,该函数也采用 Predicate
并摆脱一些样板代码 + 避免创建新的 List
:
people.removeIf(person -> dateFilters.stream()
.noneMatch(f -> numOfDaysBetween(person.getBirthDate(), f.getDate()) < f.getDiffRange()));
然后您的 people
列表将清除所有与谓词不匹配的 Person
。
关于java - 编写 Java 谓词以将列表与另一个列表进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38646356/