[英]Filter List of objects using java 8 | Filter on child objects | Streams
我想要拥有有效优惠券的人员名单,即它应该满足offerStartDate
和offerEndDate
之间的条件CURRENT_TIMESTAMP
。 你能告诉我如何使用 java 8 实现这一目标吗?
class Person {
private int id;
private String name;
@OneToMany(cascade = CascadeType.ALL)
List<BankAccounts> listOfAccounts;
//Getter and Setter
}
class BankAccounts {
private String bankName;
private String IFSC;
@OneToMany(cascade = CascadeType.ALL)
List<OfferVoucher> offers;
//Getter and Setter
}
class OfferVoucher {
int amount;
Date offerStartDate;
Date offerEndDate;
//other entities
//setter and getter
}
List<Person> validPersons = persons.stream()
.filter(p -> p.getListOfAccounts().stream()
.map(BankAccounts::getOffers)
.flatMap(List::stream)
.allMatch(o -> o.getOfferStartDate() < CURRENT_TIMESTAMP && o.getOfferEndDate() > CURRENT_TIMESTAMP))
.collect(Collectors.toList());
如果我正确理解了这个问题,这应该可行。 您可能想要使用anyMatch
而不是allMatch
,这取决于您到底想要什么。 我也将日期处理为Long
,因此您可能需要根据您的应用程序和实现方式更新这部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.