我有一个名为Age
的类,其中包含Years
,months
和days
属性。
我还有一个Age
实例列表。我想从该列表中找到最大年龄。为此,我想使用Comparator
类。
任何帮助都会受到赞赏。
答案 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();