首页 > 解决方案 > 使用 java 8 过滤对象列表 | 过滤子对象 | 流

问题描述

我想要拥有有效优惠券的人员名单,即它应该满足 和 之间CURRENT_TIMESTAMP的条件。你能告诉我如何使用 java 8 实现这一点吗?offerStartDateofferEndDate

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
}

标签: javalambdajava-8java-stream

解决方案


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,因此您可能必须根据您的应用程序及其实现方式来更新这部分。


推荐阅读