ComparisonChain用法

有一个Foo类:

class Foo{ int a = 0; String b =""; }

那么如何为一个List<Foo>根据a作为第一关键字,b作为第二关键字排序?你当然可以写个Comparator<Foo>来实现。

Guava的ComparisonChain已经写了很好的工具来实现Comparator:

Collections.sort(list, new Comparator<Foo>(){ @Override public int compare(Foo f1, Foo f2) { return ComparisonChain.start() .compare(f1.a, f2.a) .compare(f1.b, f2.b).result(); }});

如果要求第二关键字b的长度来作为排序依据,可以用Ordering来帮助:final Comparator<String> lengthComparator = new Comparator<String>(){ @Override public int compare(String o1, String o2) { return o2.length() - o1.length(); }}; Collections.sort(list, new Comparator<Foo>(){ @Override public int compare(Foo f1, Foo f2) { return ComparisonChain.start() .compare(f1.a, f2.a) .compare(f1.b, f2.b, Ordering.from(lengthComparator)).result(); }});  

当然用ComparisonChain也可以实现Comparable接口的compareTo()方法。

你可能感兴趣的:(String,list,Class,工具)