比较器的比较工具对比

5
有时,我需要使用不止一个字段来比较我的POJO列表,例如,先通过boolean isExternal()字段,然后再通过String getName()字段进行比较。
我想知道是否有已知的比较工具可以做到这一点?
代码片段:
    @Override
    public int compare( CompanyProject o1, CompanyProject o2 ) {
        return CompareBuilder.compareBoolean(o1.isExternal(), o2.isExternal()).compareString(o1.getName(), o2.getName()).getResult();
    }

不想自己写代码:)

3个回答

8

@omickron 实际上,如果它可以短路,Guava 的解决方案可能更好。Commons Lang 是经典但已经过时了。 - chrylis -cautiouslyoptimistic-
Apache Commons Lang 离我更近 :) - Mikhail Kopylov

7

谢谢,我没提到,我需要一个针对Java 7的解决方案。 - Mikhail Kopylov
至少你在7上。最近我回答了一个人的问题,他被卡在1.4上。 :-( - Stuart Marks
可怜的家伙!我真为那些不得不支持1.4或1.5版本的人感到抱歉。 - Mikhail Kopylov
1
更新链接 https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html - Jeremy Bunn

6

尝试使用Guava的ComparisonChain

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接