JAVA:过滤所有等于和晚于今天的日期

JAVA:过滤所有等于和晚于今天的日期,java,date,Java,Date,我正在尝试检查一种检索所有日期的方法,这些日期将等于今天和未来的日期 dates.stream().filter(d -> d.equals(new Date()) || d.after(new Date())).collect(Collectors.toList()); 我需要一个更有效的解决方案。如果您真的需要使用Date类(而不是推荐的java.time库),您可以使用compareTo()方法 Date currentDate=新日期(); dates.stream() .fil

我正在尝试检查一种检索所有日期的方法,这些日期将等于今天和未来的日期

dates.stream().filter(d -> d.equals(new Date()) || d.after(new Date())).collect(Collectors.toList());

我需要一个更有效的解决方案。

如果您真的需要使用
Date
类(而不是推荐的
java.time
库),您可以使用
compareTo()
方法

Date currentDate=新日期();
dates.stream()
.filter(日期->日期.compareTo(当前日期)>=0)
.collect(Collectors.toList());

Date
对象通过它们的
long
值进行比较,因此当我使用
=
时,这意味着
Date
currentDate()
相同或更晚,我建议您不要使用
Date
。那门课设计得很糟糕,而且早已过时。改为使用
LocalDate
from。如果现在的时间是17:22,并且表示今天13:42的
Date
,则您的条件将为false,日期将不包括在内
LocalDate
没有这个问题,因为
LocalDate
只代表一个日期,而不是一天中的某个时间。是什么让你认为你需要一个更有效的解决方案?过滤当前代码需要多长时间?我也这么问,因为我没有想到一种方法可以让你的代码运行得更快。如果你能确保你的日期事先被分类,那就不同了。要么你有一个邪恶的老板强迫你使用Java 5(或更早版本),要么你可以使用
LocalDate
。你认为会有哪些障碍?当然,如果您要从遗留API获取
日期
对象或将其提供给某个API,则可能无法更改该属性。您仍然可以在自己的代码中使用
LocalDate
。请问哪种方式不起作用?请将您的错误结果或错误信息粘贴到问题中,以便我们可以帮助您解决问题。坦率地说,我个人认为它可读性较差,因此维护效率低下。也许它可以节省一些时钟周期。你可能是对的。您如何看待
.filter(date->!date.before(currentDate))
而不是?事实上,我认为这三个版本是品味的问题。尽管如此,我还是推荐最新的实现。
!date.before(currentDate)
很好,可能很有效(我们必须在知道之前进行测量)。正如你可能已经看到的,在新的课程中,我一直支持你。