在对象中使用Comparator

时间:2014-10-10 09:45:15

标签: java collections comparator

我有一个名为Age的类,其中包含Yearsmonthsdays属性。

我还有一个Age实例列表。我想从该列表中找到最大年龄。为此,我想使用Comparator类。

任何帮助都会受到赞赏。

4 个答案:

答案 0 :(得分:1)

如果你想为每个字段做出自己的Comparator喜欢这个

public static Comparator<Age> yearComparator = new Comparator<Age>() {
        @Override
        public int compare(Age age1, Age age2) {
            return age1.getYear() - age2.getYear();
        }
    };

然后

Arrays.sort(yourAgesArray, Age.yearComparator);

Collections.sort(yourAgesArray, Age.yearComparator);

请阅读此article以更好地理解这一点。

答案 1 :(得分:0)

您应该在Age类中实现Comparable接口。但是,您应该考虑使用第三方时间处理库或使用java.time中的库(取决于您使用的是哪个版本的Java)。比较时间有时会变得混乱。

当您的类实现Comparable界面时,您可以使用平台上的Arrays.sort()方法。

答案 2 :(得分:0)

你可以写一个看起来像这样的比较器:

Comparator<Age> ageComparator = new Comparator<Age>() {
    @Override
    public int compare(Age age1, Age age2) {
        if(age1.getYear() != age2.getYear()) {
            return age1.getYear() < age2.getYear() ? -1 : 1;
        } else if(age1.getMonth() != age2.getMonth()) {
            return age1.getMonth() < age2.getMonth() ? -1 : 1;
        } else if(age1.getDay() != age2.getDay()) {
            return age1.getDay() < age2.getDay() ? -1 : 1;
        } else {
            return 0;
        }
    }
}

答案 3 :(得分:0)

从Java 8开始,您可以使用这个单行解决方案:

Age maxAge = collection
  .stream()
  .max(
     Comparator.comparing(Age::getYear)
    .thenComparing(Age::getMonth)
    .thenComparing(Age::getDay)
  )
  .get();