您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Java-类库-Guava-Ordering比较器

2024/2/27 18:53:38发布18次查看
ordering是guava类库提供的一个犀利强大的比较器工具,guava的ordering和jdk comparator相比功能更强。它非常容易扩展,可以轻松构造复杂的comparator,然后用在容器的比较、排序等操作中。
本质上来说,ordering 实例无非就是一个特殊的comparator 实例。ordering只是需要依赖于一个比较器(例如,collections.max)的方法,并使其可作为实例方法。另外,ordering提供了链式方法调用和加强现有的比较器。
下面我们看看ordering中的一些具体方法和简单的使用实例。
常见的静态方法:
natural():使用comparable类型的自然顺序, 例如:整数从小到大,字符串是按字典顺序;
usingtostring() :使用tostring()返回的字符串按字典顺序进行排序;
arbitrary() :返回一个所有对象的任意顺序, 即compare(a, b) == 0 就是 a == b (identity equality)。 本身的排序是没有任何含义, 但是在vm的生命周期是一个常量。
[code]import java.util.list; import org.junit.test; import com.google.common.collect.lists; import com.google.common.collect.ordering; public class orderingtest { @test public void teststaticordering(){ list<string> list = lists.newarraylist(); list.add("peida"); list.add("jerry"); list.add("harry"); list.add("eva"); list.add("jhon"); list.add("neron"); system.out.println("list:"+ list); ordering<string> naturalordering = ordering.natural(); ordering<object> usingtostringordering = ordering.usingtostring(); ordering<object> arbitraryordering = ordering.arbitrary(); system.out.println("naturalordering:"+ naturalordering.sortedcopy(list)); system.out.println("usingtostringordering:"+ usingtostringordering.sortedcopy(list)); system.out.println("arbitraryordering:"+ arbitraryordering.sortedcopy(list)); } }
[code]list:[peida, jerry, harry, eva, jhon, neron] naturalordering:[eva, harry, jerry, jhon, neron, peida] usingtostringordering:[eva, harry, jerry, jhon, neron, peida] arbitraryordering:[neron, harry, eva, jerry, peida, jhon]
reverse(): 返回与当前ordering相反的排序:
nullsfirst(): 返回一个将null放在non-null元素之前的ordering,其他的和原始的ordering一样;
nullslast():返回一个将null放在non-null元素之后的ordering,其他的和原始的ordering一样;
compound(comparator):返回一个使用comparator的ordering,comparator作为第二排序元素,例如对bug列表进行排序,先根据bug的级别,再根据优先级进行排序;
lexicographical():返回一个按照字典元素迭代的ordering;
onresultof(function):将function应用在各个元素上之后, 在使用原始ordering进行排序;
greatestof(iterable iterable, int k):返回指定的第k个可迭代的最大的元素,按照这个从最大到最小的顺序。是不稳定的。
leastof(iterable iterable,int k):返回指定的第k个可迭代的最小的元素,按照这个从最小到最大的顺序。是不稳定的。
isordered(iterable):是否有序,iterable不能少于2个元素。
isstrictlyordered(iterable):是否严格有序。请注意,iterable不能少于两个元素。
sortedcopy(iterable):返回指定的元素作为一个列表的排序副本。
[code]import java.util.list; import org.junit.test; import com.google.common.collect.immutablelist; import com.google.common.collect.lists; import com.google.common.collect.ordering; public class orderingtest { @test public void testordering(){ list<string> list = lists.newarraylist(); list.add("peida"); list.add("jerry"); list.add("harry"); list.add("eva"); list.add("jhon"); list.add("neron"); system.out.println("list:"+ list); ordering<string> naturalordering = ordering.natural(); system.out.println("naturalordering:"+ naturalordering.sortedcopy(list)); list<integer> listreduce= lists.newarraylist(); for(int i=9;i>0;i--){ listreduce.add(i); } list<integer> listtest= lists.newarraylist(); listtest.add(1); listtest.add(1); listtest.add(1); listtest.add(2); ordering<integer> naturalintreduceordering = ordering.natural(); system.out.println("listtest:"+ listtest); system.out.println(naturalintreduceordering.isordered(listtest)); system.out.println(naturalintreduceordering.isstrictlyordered(listtest)); system.out.println("naturalintreduceordering:"+ naturalintreduceordering.sortedcopy(listreduce)); system.out.println("listreduce:"+ listreduce); system.out.println(naturalintreduceordering.isordered(naturalintreduceordering.sortedcopy(listreduce))); system.out.println(naturalintreduceordering.isstrictlyordered(naturalintreduceordering.sortedcopy(listreduce))); ordering<string> natural = ordering.natural(); list<string> abc = immutablelist.of("a", "b", "c"); system.out.println(natural.isordered(abc)); system.out.println(natural.isstrictlyordered(abc)); system.out.println("isordered reverse :"+ natural.reverse().isordered(abc)); list<string> cba = immutablelist.of("c", "b", "a"); system.out.println(natural.isordered(cba)); system.out.println(natural.isstrictlyordered(cba)); system.out.println(cba = natural.sortedcopy(cba)); system.out.println("max:"+natural.max(cba)); system.out.println("min:"+natural.min(cba)); system.out.println("leastof:"+natural.leastof(cba, 2)); system.out.println("naturalordering:"+ naturalordering.sortedcopy(list)); system.out.println("leastof list:"+naturalordering.leastof(list, 3)); system.out.println("greatestof:"+naturalordering.greatestof(list, 3)); system.out.println("reverse list :"+ naturalordering.reverse().sortedcopy(list)); system.out.println("isordered list :"+ naturalordering.isordered(list)); system.out.println("isordered list :"+ naturalordering.reverse().isordered(list)); list.add(null); system.out.println(" add null list:"+list); system.out.println("nullsfirst list :"+ naturalordering.nullsfirst().sortedcopy(list)); system.out.println("nullslast list :"+ naturalordering.nullslast().sortedcopy(list)); } } //============输出============== list:[peida, jerry, harry, eva, jhon, neron] naturalordering:[eva, harry, jerry, jhon, neron, peida] listtest:[1, 1, 1, 2] true false naturalintreduceordering:[1, 2, 3, 4, 5, 6, 7, 8, 9] listreduce:[9, 8, 7, 6, 5, 4, 3, 2, 1] true true true true isordered reverse :false false false [a, b, c] max:c min:a leastof:[a, b] naturalordering:[eva, harry, jerry, jhon, neron, peida] leastof list:[eva, harry, jerry] greatestof:[peida, neron, jhon] reverse list :[peida, neron, jhon, jerry, harry, eva] isordered list :false isordered list :false add null list:[peida, jerry, harry, eva, jhon, neron, null] nullsfirst list :[null, eva, harry, jerry, jhon, neron, peida] nullslast list :[eva, harry, jerry, jhon, neron, peida, null]
以上就是java-类库-guava-ordering比较器的内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product