使用集合.max一段时间 (java)



所以我有一个List<Period> periods = new Arraylist<>();,它存储了我从数据库中获取的日期。(期间是我自己的班级,忘了提)

列表看起来像这样:2012-02-03, 2012-02-04, 2012-03-05, 2012-03-07, 2012-03-08, 2012-03-09, 2012-03-10我需要从列表中找到最大的时期。所以结果必须是period: 2012-03-07 to 2012-03-10.

现在我想我会像这样使用收集方法:Period biggestperiod = Collections.max(periods);,除了它不起作用并且我收到下一个错误:"集合中的 max(java.util.Collection) 无法应用于 (java.util.List) 原因;不存在类型变量 T 的实例,因此 Period 符合 Comparable 。

在编程方面,我是一个彻头彻尾的菜鸟,所以有人可以指出我正确的方向吗?

Period是你自己的类之一,如果它是 Java 的Period,你必须将Collections.max与附加Comparator一起使用,没有它你就无法使用Collections.max函数。要在没有额外Comparator的情况下使用Collections.max方法,Period必须实现Comparable-java.time.Period没有。

请参阅 https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#max(java.util.Collection) 以获取参考,https://docs.oracle.com/javase/8/docs/api/java/time/Period.html 以获取Period类。

我刚刚写了一个简单的例子来说明它是如何工作的:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Number implements Comparable
{
public int number;
public Number(int number)
{
this.number = number;
}
@Override
public int compareTo(Object arg0)
{
if (number > ((Number) arg0).number) {
return 1;
}
if (number == ((Number) arg0).number) {
return 0;
}
if (number < ((Number) arg0).number) {
return -1;
}
return -2;
}
public static void main(String[] args)
{
Number one = new Number(1);
Number three = new Number(3);
Number two = new Number(2);
List<Number> numberList = new ArrayList<>();
numberList.add(one);
numberList.add(three);
numberList.add(two);
System.err.println(Collections.max(numberList).number);
}
}

最新更新