今天我们来看一下Guava的排序,正好可以和我们之前的Java排序进行对比,我们可以看看到底Guava使怎样的将排序做到流畅。。。
首先我们要知道Guava中的排序器是Ordering,顾名思义,就是秩序,制度啦,也就是说我们观看名字就能理解其的作用和目的啦,所以我们也要向我们的先辈们进行学习那就是名字要起的见名知意,这样的代码大家才能更容易理解和接受,还有就是维护。。其实我们在后面的例子中可以很清楚的看到Guava的Ordering排序器可以很方便的实现自定义排序,这个相较于Java的排序有较大的提升。其实我们可以跟进去源码看一下:
1.Guava的排序Ordering集合排序都是调用的一个接口那就是:
public <E extends T> List<E> sortedCopy(Iterable<E> elements) {
@SuppressWarnings("unchecked") // does not escape, and contains only E's
E[] array = (E[]) Iterables.toArray(elements);
Arrays.sort(array, this);
return Lists.newArrayList(Arrays.asList(array));
}
其实看一下这个接口也是刻可以明白的,他就是接受一个泛型的Iterable对象,这就是说,只要是一个可以遍历的对象传入都是OK的。为什么我们定义的集合可以而单个的对象比如String str = "丽丽"; 不行呢,其实是因为我们所有的集合类型都继承自Collection而Collection集合里面就有一个迭代器。
好了我们言归正传,我们调用这个统一的入口就可以实现我们的排序,就是根据你传入的参数的类型进行排序的,可以是自然须,字典序,无序等等。。。我们先来看一下我们平时常用的几个排序的静态方法:
natural():对传入的参数进行自然排序,例如:String排字典序,Int排大小。。。
usingToString():排字典序。
artibrary():无序。每次的排序结果都不同。
好了上代码:
import com.google.common.collect.Lists; import com.google.common.collect.Ordering; import java.util.List; /** * Created by luyangli on 15-9-17. */ public class OrderingTest1 { public static void main(String[] args) { ListstringList = Lists.newArrayList(); stringList.add("luluyang"); stringList.add("songyangjia"); stringList.add("chagnhaha"); stringList.add("buzhidaohaofanaaaaaaaa"); stringList.add("wozhedebuzhidaoa"); //String str = "lili"; System.out.println("=====================原List======================"); System.out.println("striongList:" + stringList); System.out.println(); Ordering natural = Ordering.natural(); Ordering
我们看一下结果把:
=====================原List====================== striongList:[luluyang, songyangjia, chagnhaha, buzhidaohaofanaaaaaaaa, wozhedebuzhidaoa] =====================natural(自然序)====================== natural:[buzhidaohaofanaaaaaaaa, chagnhaha, luluyang, songyangjia, wozhedebuzhidaoa] =====================natural(字典序)====================== usingToString:[buzhidaohaofanaaaaaaaa, chagnhaha, luluyang, songyangjia, wozhedebuzhidaoa] =====================natural(无序)====================== arbirary:[songyangjia, chagnhaha, buzhidaohaofanaaaaaaaa, luluyang, wozhedebuzhidaoa] interList:[0, 1, 2, 3, 4, 5, 7, 8, 9]
在最后一段我还实现了一个自定义的排序器,这个是不是相较于Java的排序有很大的好处呢再也不用怕没有调用Collections.sort()了。
好了具体的程序我们自己实际操作一下,在理解理解就可以掌握了。。