我是靠谱客的博主 成就八宝粥,这篇文章主要介绍饿了么开源项目:Java Comparator生成器 Gradle Maven 用法 使用注解 使用API ,现在分享给大家,希望可以做个参考。

版权所有。所有权利保留。

欢迎转载,转载时请注明出处:

http://blog.csdn.net/xiaofei_it/article/details/51399159


公司Android项目里经常需要对元素进行排序,而排序都是多字段的,相应的Comparator比较难写。于是我就写了这么一个工具类,用户只需要指定排序规则,便可以自动生成相应的Comparator。


项目地址:

https://github.com/Xiaofei-it/ComparatorGenerator


特色

Java编程经常要对数据进行排序,此时需要写一个Comparator。但Comparator比较难写,尤其是在多字段排序的时候更加复杂。

你可以方便地使用此工具类生成Comparator。你只需要指定在排序的时候要依据哪些字段以及升序还是降序,这个工具类会为你生成相应的Comparator。

Gradle

复制代码
1
2
3
4
dependencies { compile 'xiaofei.library:comparator-generator:1.1' }

Maven

复制代码
1
2
3
4
5
6
7
<dependency> <groupId>xiaofei.library</groupId> <artifactId>comparator-generator</artifactId> <version>1.1</version> <type>pom</type> </dependency>

用法

现在假设要对一个类的许多实例进行排序。排序的时候依据某些字段或者函数的返回值。

那么你要做的就是告诉工具类这些字段和函数,并且指定权重以及升降序。

有两种方法指指定排序策略:使用注解或者使用API。

使用注解

现在要对Item1生成Comparator。排序的时候首先对price进行升序,如果price相同则对distance进行降序,如果distance也相同则对itemName进行升序。

那么对Item1的相应字段加上注解:

复制代码
1
2
3
4
5
6
7
8
9
class Item1 { @Criterion(priority = 3, order = Order.ASCENDING) private int price; @Criterion(priority = 2, order = Order.DESCENDING) private int distance; @Criterion(priority = 1) // order默认是升序 private String itemName; }

使用的时候只需要这样写:

复制代码
1
2
3
Comparator<Item1> comparator = new ComparatorGenerator<Item1>(Item1.class).generate(); Arrays.sort(items1, comparator);

再看一个例子。对Item3排序,先按总价升序,再按itemName升序。总价是由函数给出的,我们依然可以对函数加上注解。

注意:函数必须是无参成员函数!

复制代码
1
2
3
4
5
6
7
8
9
10
11
class Item3 { private int price; private int number; @Criterion(priority = 1) // 默认升序 private String itemName; @Criterion(priority = 2, order = Order.ASCENDING) int getTotalPrice() { return price * number; } }

使用的时候写如下代码:

复制代码
1
2
3
Comparator<Item3> comparator = new ComparatorGenerator<Item3>(Item3.class).generate(); Arrays.sort(items3, comparator);

使用API

某些时候要对一个类写出不同Comparator,比如对订单排序的时候会有很多种:距离优先、评价优先、价格优先。

那么这时候就不能使用注解,因为通过注解只能生成唯一的Comparator。

这时候使用api直接指定。

以下有一个类Item2。

复制代码
1
2
3
4
5
6
class Item2 { private int price; private int distance; private String itemName; }

首先对price升序,然后对distance降序,然后对itemName升序。

复制代码
1
2
3
4
5
6
7
8
Comparator<Item2> comparator2 = new ComparatorGenerator<Item2>(Item2.class) .addCriterion(3, "price", Order.ASCENDING) .addCriterion(2, "distance", Order.DESCENDING) .addCriterion(1, "itemName") // 默认升序 .generate(); Arrays.sort(items2, comparator2);

再看一个例子。

复制代码
1
2
3
4
5
6
7
8
9
class Item4 { private int price; private int number; private int distance; int getTotalPrice() { return price * number; } }

对Item4排序,首先按总价升序,然后按距离降序。

复制代码
1
2
3
4
5
6
Comparator<Item4> comparator4 = new ComparatorGenerator<Item4>(Item4.class) .addCriterion(3, "getTotalPrice", Order.ASCENDING) .addCriterion(2, "distance", Order.DESCENDING) .generate(); Arrays.sort(items4, comparator4);



最后

以上就是成就八宝粥最近收集整理的关于饿了么开源项目:Java Comparator生成器 Gradle Maven 用法 使用注解 使用API 的全部内容,更多相关饿了么开源项目:Java内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部