1.概述

在本文中,我们将查看订购从番石榴图书馆的类。

订购类实现了比较器接口,为创建和链接比较器提供了一个有用而流畅的API。

作为一个快速的旁注,它也值得看看新的Comparator.comparing ()API——提供类似的功能;这里有一个实际的例子使用该API。

2.创建订购

订购有一个有用的生成器方法,该方法返回可以在sort ()的实例的任何其他地方比较器是必要的。

我们可以通过执行方法创建自然订单实例自然():

List integers = Arrays。asList (3,2,1);integers.sort (Ordering.natural ());assertequal (arrays . aslist(1, 2, 3)整数);

假设我们有一个集合对象:

class Person {private String name;私人整数年龄;//标准构造函数

我们想要对这些对象的列表排序年龄字段。我们可以创建我们的定制订购这将通过扩展它来做到这一点:

List persons = Arrays。asList(new Person("Michael", 10); new Person("Alice", 3));order  orderingByAge = new order () {@Override public int compare(Person p1, Person p2) {return int .compare(p1.age, p2.age);}};persons.sort (orderingByAge);assertequal(数组。asList(new Person(“Alice”,3),new Person(“Michael”,10)),persons);

然后我们可以用我们的orderingByAge然后把它传递给sort ()方法。

3.链接排列

这个类的一个有用特性是,我们可以将不同的方式连接起来排序。假设我们有一个人的集合我们想要对它排序年龄场,列表开头的年龄字段值:

List persons = Arrays。asList(new Person("Michael", 10), new Person("Alice", 3), new Person("Thomas", null));order  order = order .natural() .nullsFirst() .onResultOf(new Function() {@Override public Comparable apply(Person Person) {return Person .age;}});persons.sort(排序);assertequal(数组。asList(new Person("Thomas", null), new Person("Alice", 3), new Person("Michael", 10)), persons);

这里需要注意的重要事情是一个特殊的顺序订购S被执行-顺序是从右到左。首先onResultOf ()执行,该方法提取我们想要比较的字段。

然后,nullFirst ()比较器是执行。因此,排序后的集合将具有对象,该对象具有作为一个年龄字段的开头。

在分类过程的最后,年龄按照使用方法指定的自然顺序对字段进行比较自然()

4.结论

在本文中,我们研究了订购类从番石榴库,让我们创建更流畅和优雅比较器我们创建了我们的定制排序,我们从API中使用预定义的,并将它们链接起来以实现更多的自定义顺序。

中可以找到所有这些示例和代码片段的实现GitHub项目-这是一个基于maven的项目,所以它应该很容易导入和运行。

通用的底部

开始使用Spring 5和Spring Boot 2,通过学习的春天课程:

>>看看这个课程
对这篇文章的评论关闭!