在Java8中,是否将一个日期与三个或三个以上的日期进行比较?
使用java。时间API可以使用以下语法比较两个日期:
date1.before(date2);
或
date2.after(date1);
但是,当比较3个或更多日期时,这会变得非常冗长。 是否有方法将一个日期与多个其他日期进行比较,以确定提供的日期是否在所有其他日期之前/之后
你可以在下面搜索框中键入要查询的问题!
使用java。时间API可以使用以下语法比较两个日期:
date1.before(date2);
或
date2.after(date1);
但是,当比较3个或更多日期时,这会变得非常冗长。 是否有方法将一个日期与多个其他日期进行比较,以确定提供的日期是否在所有其他日期之前/之后
# 1 楼答案
因为这个问题是关于
Java 8
,这里有一个“Java 8ish”解决方案:与Andy Turner’s solution相比,这不仅是一个“Java8风格”的解决方案,而且执行的比较更少
对于两个测试中的任何一个,要找到最小值,请分别。如果最多有
n
个元素,则需要进行n-1
比较,然后将找到的元素与date
进行比较,因此,总的比较次数为n
。相比之下,这个基于流的解决方案将最多比较个n
元素和参考date
,最多比较n
。由于这种基于流的解决方案是短路的,即在第一个不匹配的元素处停止,因此比较的总数较低,除非它们都匹配,在这种情况下,另一个测试的第一次比较将失败如果第一个测试成功,您可以将
Collections.min
/Collections.max
解决方案更改为跳过第二个测试,但最坏的情况仍然是2*n
比较,而基于流的解决方案的最坏情况是n+1
比较# 2 楼答案
如果你把所有的东西都放在一个集合里,也许会有帮助: 收藏。最多(日期); 收藏。分钟(日期)
# 3 楼答案
你要做的就是把这个日期和你的“3个或更多”日期中的一个进行比较:你只需要找出哪个是,然后比较两个日期
由于
Date
实现了Comparable<Date>
,因此可以使用Collections.min
和Collections.max
查找最早和最新的两个:然后:
等等