Java:按顺序比较三个不同的字段。就像一个SQL数据库

时间:2015-12-01 02:20:36

标签: java sql database

例如,在" 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());
    }
};

编辑: 样品分类顺序:

  1. Abc Bcd Efg
  2. Abc Def Ghi
  3. Cde Fgh Ijk
  4. Cde Fgh Lmn
  5. Hij Ijk Lmn
  6. Zee Why Bee

3 个答案:

答案 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();
}