Ordring
它是一款Guava实现的比较器,适用于实现了Collention接口的类,被用来构建复杂比较器。一个排序实例是一个特殊的比较器实例。排序仅仅采用依赖于比较器的方法,并将他们作为实例方法提供。
Creation
公共Orderings 由静态方法创建:
.natural() 返回一个Ordering
但更常用的方式是自己实现一个compare比较器
Ordering byLengthOrdering = new Ordering
public int compare(String left, String right) {
return Ints.compare(left.length(), right.length());
}
};
chaining
Orderring 也包装了常用的排序,包括:
reverse: 返回倒序
nullsFirst():返回一个null排列在所有元素之前的序列
public
return new NullsFirstOrdering(this);
}
compound():返回一个采用特殊比较器来重排的序列
public Ordering compound(Comparator
return new CompoundOrdering(this, (Comparator)Preconditions.checkNotNull(secondaryComparator));
}
lexicographical():返回一个按照字典序排序的序列
public
return new LexicographicalOrdering(this);
}
onResultOf():通过将函数应用到它们并将结果与原始排序进行比较,返回一个排序值。
public Ordering onResultOf(Function
return new ByFunctionOrdering(function, this);
}
Application
Guava 提供了一系列方法操作和检查数据并排序。
public List greatestOf(Iterable iterable, int k) {
return this.reverse().leastOf(iterable, k);
}
//根据排序,返回迭代器中最大的几个元素
public boolean isOrdered(Iterable
Iterator
Object next;
if (it.hasNext()) {
for(Object prev = it.next(); it.hasNext(); prev = next) {
next = it.next();
if (this.compare(prev, next) > 0) {
return false;
}
}
}
return true;
}
public abstract int compare(@Nullable T var1, @Nullable T var2);
//检测是否按照排序顺序
public
E[] array = (Object[])Iterables.toArray(elements);
Arrays.sort(array, this);
return Lists.newArrayList(Arrays.asList(array));
}
//返回特定排序的List
public
Object minSoFar;
for(minSoFar = iterator.next(); iterator.hasNext(); minSoFar = this.min(minSoFar, iterator.next())) {
;
}
return minSoFar;
}
//找到最小值