Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaSpring引导中按localDateTime过滤对象?_Java_Filter_Java 8 - Fatal编程技术网

如何在JavaSpring引导中按localDateTime过滤对象?

如何在JavaSpring引导中按localDateTime过滤对象?,java,filter,java-8,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.confirmDat

我有目标,这是什么

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和javaspringboot。 我试过了,但没有成功

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());
LocalDateTime fromdate=LocalDateTime.parse(memberSkillRequest.getFromDate(),格式化程序);
LocalDateTime toDate=LocalDateTime.parse(memberSkillRequest.getToDate(),格式化程序);
List filterMemberSkill=memberSkills.stream().filter(memberSkill->memberSkill.getConfirmDate().isBefore(fromdate)).collect(Collectors.toList());
列出listMemberSkill=filterMemberSkill.stream().filter(memberSkill->memberSkill.getConfirmDate().isAfter(toDate)).collect(Collectors.toList());

fromdate和todate从客户端发送。

可能是因为您正在第一个筛选列表上运行第二个筛选,该列表已经排除了来自第二个筛选的任何内容。你应该可以这样做-

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

我猜你是有意这样做的:

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

这将为您提供
MemberSkills
对象,其确认日期在从日期到截止日期之间的半开放时间间隔内。也就是说,日期必须在“开始日期”或“结束日期”之后,并且严格地说必须在“结束日期”之前。这是定义时间间隔的常用方法。在代码中,我使用“notbefore”表示“on或after”。

您有一个
MemberSkills
对象。现在,您所说的过滤是什么意思?在MemberSkills对象包含属性confirmDate时,我想按confirmDate过滤?
isBefore(fromdate)
似乎是向后的。你不想在“开始日期”之后和“结束日期”之前吗?主要问题是什么?你有空名单吗?或者列表中是否包含错误的对象?抱歉,因为我不了解筛选器,所以我不使用它以及它是如何使用的?代码已经过测试并运行,@nullpointer。当然,什么是正确的取决于期望的结果是什么,这在问题中并不清楚。“不是在起始日期之前,而是在截止日期之前”并不是固有的错误。我故意放在那里的。至少试着解释为什么,好吧。从第二个角度看,这是对的反向检查。其中IMHO更多地涉及从“confirmDate”到“confirmDate”的过滤MemberSkill。这两个答案之间的功能差异很小,只是在边界上:该答案要求确认日期严格晚于起始日期。我只要求它是从日期开始或之后。询问者应根据要求进行挑选@nullpointer真的同意了因为。。。问题中的过滤器以相反的方式包含日期。它包括
toDate
它应该在
fromDate
的位置,反之亦然。感谢您,除了这种方式,我们还可以使用来自DAO的查询来获取数据,这将提高性能