首页 > 解决方案 > 在一段时间内使用 Collections.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 。

在编程方面,我是一个完全的菜鸟,所以有人能指出我正确的方向吗?

标签: java

解决方案


Period是你自己的类之一,如果它是 Java 的Period,你必须使用Collections.max额外的Comparator 你不能使用Collections.max没有它的函数。要使用Collections.max没有附加的方法ComparatorPeriod必须实现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.htmlPeriod类。

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

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);
}
}

推荐阅读