如何在Java Spring Boot中通过localDateTime过滤对象?

时间:2019-01-17 10:15:36

标签: java filter java-8

我有对象,这是描述吗?

public MemberSkills(User user, BasicSkills skills, Short level, Short status, LocalDateTime confirmDate, String comment) {
    this.user = user;
    this.skills = skills;
    this.level = level;
    this.status = status;
    this.confirmDate = confirmDate;
    this.comment = comment;
}

我想从“ confirmDate”到“ confirmDate”过滤MemberSkill。 我正在使用Java-8和Java-springboot。 我尝试过,但是没有用。

LocalDateTime fromdate = LocalDateTime.parse(memberSkillRequest.getFromDate(), formatter);
LocalDateTime toDate = LocalDateTime.parse(memberSkillRequest.getToDate(), formatter);

List<MemberSkills> filterMemberSkill = memberSkills.stream().filter(memberSkill -> memberSkill.getConfirmDate().isBefore(fromdate)).collect(Collectors.toList());
List<MemberSkills> listMemberSkill = filterMemberSkill.stream().filter(memberSkill -> memberSkill.getConfirmDate().isAfter(toDate)).collect(Collectors.toList());

fromdate和todate从客户端发送出去。

2 个答案:

答案 0 :(得分:1)

可能是因为您正在第一个过滤列表上运行第二个过滤,该列表已经排除了第二个过滤器中的所有内容。您应该可以执行以下操作-

List<MemberSkills> filterMemberSkill = memberSkills.stream()
                 .filter(memberSkill -> memberSkill.getConfirmDate().isBefore(toDate) 
                                   && memberSkill.getConfirmDate().isAfter(fromDate))
                 .collect(Collectors.toList());

答案 1 :(得分:1)

我的猜测是您打算这样做的吗?

    List<MemberSkills> listMemberSkill = memberSkills.stream()
            .filter(memberSkill -> ! memberSkill.getConfirmDate().isBefore(fromdate))
            .filter(memberSkill -> memberSkill.getConfirmDate().isBefore(toDate))
            .collect(Collectors.toList());

这将为您提供MemberSkills个对象,这些对象的确认日期在从日期到日期的半开间隔中。也就是说,日期必须从日期之前或之后,并且必须严格地在日期之前。这是定义时间间隔的常用方法。在代码中,“不早于”表示“在...上”。