繁体   English   中英

使用 java 8 过滤对象列表 | 过滤子对象 | 流

[英]Filter List of objects using java 8 | Filter on child objects | Streams

我想要拥有有效优惠券的人员名单,即它应该满足offerStartDateofferEndDate之间的条件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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM