例如,在" SQL中,我有一个SELECT * FROM db ORDER的第一个,中间的,最后一个ASC"并且输出将按照名字首先排序,然后是中间名,姓氏对吗?如何在Java中使用相同的输出具有类似的功能?希望你明白我的意思。谢谢。
我有以下样本;
public static final Comparator<Person> NameCompare = new Comparator<Person>()
{
public int compare(Person o1, Person o2) {
return o2.first().compareTo(o1.first()) == 0 ? o2.first().compareTo(o1.first()) : o2.middle().compareTo(o1.middle()) == 0 ? o2.middle().compareTo(o1.last()) : o2.property().compareTo(o1.last());
}
};
编辑: 样品分类顺序:
答案 0 :(得分:4)
如果您使用的是Java 8,则可以执行以下操作:
Comparator<Person> comp = Comparator.comparing(Person::getFirst)
.thenComparing(Person::getMiddle)
.thenComparing(Person::getLast);
并对列表进行排序:
List<Person> people = ...;
people.sort(comp);
答案 1 :(得分:1)
试试这个:
public static final Comparator<Person> NameCompare = new Comparator<Person>()
{
public int compare(Person o1, Person o2) {
int i = o1.first.compareTo(o2.first);
if (i != 0) return i;
i = o1.middle.compareTo(o2.middle);
if (i != 0) return i;
return o1.last.compareTo(o2.last);
}
答案 2 :(得分:1)
如果您使用的是JDK&lt; 8。
像Guava和Apache Commons Lang这样的库可以提供实用程序,使链接比较方法更容易(代码直接从他们的文档中提取,只是为了给你一个想法。在Comparator
中使用它需要一点点扭曲。) :
番石榴
public int compareTo(Foo that) {
return ComparisonChain.start()
.compare(this.aString, that.aString)
.compare(this.anInt, that.anInt)
.compare(this.anEnum, that.anEnum, Ordering.natural().nullsLast())
.result();
}
Apache Commons Lang 2/3
public int compareTo(Object o) {
MyClass myClass = (MyClass) o;
return new CompareToBuilder()
.appendSuper(super.compareTo(o)
.append(this.field1, myClass.field1)
.append(this.field2, myClass.field2)
.append(this.field3, myClass.field3)
.toComparison();
}