java基础---->多个排序的拓展
根据一些特定的规则,我们可以利用java的反射机制做到很有趣的封装。
java的排序封装

一、定义一些comparator
AmountComparatorAsc:amount升序
package com.huhx.example; import java.util.Comparator;
import java.util.Map; @SuppressWarnings("rawtypes")
public class AmountComparatorAsc implements Comparator<Map> { @Override
public int compare(Map map1, Map map2) {
Integer amount1 = (Integer) map1.get("amount");
Integer amount2 = (Integer) map2.get("amount");
return amount2 - amount1;
}
}
AmountComparatorDesc:amount降序
package com.huhx.example; import java.util.Comparator;
import java.util.Map; @SuppressWarnings("rawtypes")
public class AmountComparatorDesc implements Comparator<Map> { @Override
public int compare(Map map1, Map map2) {
Integer amount1 = (Integer) map1.get("amount");
Integer amount2 = (Integer) map2.get("amount");
return amount1 - amount2;
}
}
RateComparatorAsc: 利率升序
package com.huhx.example; import java.util.Comparator;
import java.util.Map; @SuppressWarnings("rawtypes")
public class RateComparatorAsc implements Comparator<Map> { @Override
public int compare(Map map1, Map map2) {
int flag = 0;
String rateStr1 = (String) map1.get("lilv");
String rateStr2 = (String) map2.get("lilv");
float rateSub = Float.valueOf(rateStr1.replace("%", "")) - Float.valueOf(rateStr2.replace("%", ""));
if (rateSub > 0) {
flag = 1;
} else if(rateSub < 0) {
flag = -1;
} else {
flag = 0;
}
return flag;
}
}
RateComparatorDesc:利率降序
package com.huhx.example; import java.util.Comparator;
import java.util.Map; @SuppressWarnings("rawtypes")
public class RateComparatorDesc implements Comparator<Map> {
@Override
public int compare(Map map1, Map map2) {
int flag = 0;
String rateStr1 = (String) map1.get("lilv");
String rateStr2 = (String) map2.get("lilv"); float rateSub = Float.valueOf(rateStr2.replace("%", "")) - Float.valueOf(rateStr1.replace("%", ""));
if (rateSub > 0) {
flag = 1;
} else if (rateSub < 0) {
flag = -1;
} else {
flag = 0;
}
return flag;
}
}
二、定义排序的工具类:SequenceUtils的sort方法
package com.huhx.example; import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map; /**
* @author huhx
*/
public class SequenceUtils {
public final static String COMPARATOR_NAME = "Comparator";
public final static String ASC_ORDER = "Asc";
public final static String DESC_ORDER = "Desc";
public final static String PACKAGE_PATH = "com.huhx.example"
;
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void sort(String order, String data, List list) { String classStrName = comparatorName(order, data);
try {
Comparator<Map> comparator = (Comparator<Map>)Class.forName(PACKAGE_PATH + "." +classStrName).newInstance();
Collections.sort(list, comparator);
} catch (Exception e) {
e.printStackTrace();
}
} // 0 stands for asc, 1 stands for desc
public static String comparatorName(String order, String data) {
String dataName = changeFirstUpper(data);
String oderName = "";
if (order.equals("0")) {
oderName = ASC_ORDER;
} else if (order.equals("1")) {
oderName = DESC_ORDER;
}
return dataName + COMPARATOR_NAME + oderName;
} private static String changeFirstUpper(String data) {
String str = data.substring(0, 1);
return str.toUpperCase() + data.substring(1, data.length());
}
}
三、我们的测试类以及测试数据:sequence
测试的数据:
private static void initData(List<Map> data) {
Map map = new HashMap();
map.put("lilv", "10%");
map.put("amount", 2000);
data.add(map);
map = new HashMap();
map.put("lilv", "60%");
map.put("amount", 7000);
data.add(map);
map = new HashMap();
map.put("lilv", "80%");
map.put("amount", 5000);
data.add(map);
map = new HashMap();
map.put("lilv", "20%");
map.put("amount", 3000);
data.add(map);
map = new HashMap();
map.put("lilv", "50%");
map.put("amount", 6000);
data.add(map);
map = new HashMap();
map.put("lilv", "90%");
map.put("amount", 1000);
data.add(map);
map = new HashMap();
map.put("lilv", "30%");
map.put("amount", 8000);
data.add(map);
map = new HashMap();
map.put("lilv", "70%");
map.put("amount", 4000);
data.add(map);
map = new HashMap();
map.put("lilv", "40%");
map.put("amount", 10000);
data.add(map);
map = new HashMap();
map.put("lilv", "100%");
map.put("amount", 9000);
data.add(map);
}
main类的代码如下:
public static void main(String[] args) {
List<Map> data = new ArrayList<Map>();
initData(data);
System.out.println(data);
SequenceUtils.sort("1", "rate", data);
System.out.println(data);
}
友情链接
java基础---->多个排序的拓展的更多相关文章
- Java基础-数组常见排序方式
Java基础-数组常见排序方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数据的排序一般都是生序排序,即元素从小到大排列.常见的有两种排序方式:选择排序和冒泡排序.选择排序的特 ...
- 【java基础】选择排序and冒泡排序
前言 : 今天学习的是J2SE视频里的第五章,数组部分,它里面留了一个经典的作业,就是让我们去从1倒9按一定规格排序,这让我想起了学习vb的时候最最让我头疼的两种排序方法,选择排序法 和 冒泡排序法. ...
- java基础之 重排序
重排序通常是编译器或运行时环境为了优化程序性能而采取的对指令进行重新排序执行的一种手段.重排序分为两类:编译期重排序和运行期重排序,分别对应编译时和运行时环境. 在并发程序中,程序员会特别关注不同进程 ...
- 蓝桥网试题 java 基础练习 数列排序
---------------------------------------------------------------------------------------------------- ...
- java基础---数组的排序算法(3)
一.排序的基本概念 排序:将一个数据元素集合或序列重新排列成按一个数据元素某个数据项值有序的序列 稳定排序:排序前和排序后相同元素的位置关系与初始序列位置一致(针对重复元素来说,相对位置不变) 不稳定 ...
- 【Java基础】选择排序、冒泡法排序、二分法查找
1.选择排序: //改进后的选择排序,减少交换的次数 public static void sortSelect(int arr[]) { //用于存放最小数的下标 int s; for (int i ...
- Java基础系列--桶排序
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/9045967.html 1.算法简介 桶排序可以算是最简单快速的排序算法了,只是限定条件要多 ...
- Java基础复习笔记基本排序算法
Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...
- Java基础教程:对象比较排序
Java基础教程:对象比较排序 转载请标明出处:http://blog.csdn.net/wangtaocsdn/article/details/71500500 有时候需要对对象列表或数组进行排序, ...
随机推荐
- Android——ImageView的scaleType属性与adjustViewBounds属性 (转)二
1 android:scaleType="center" (1)当图片大于ImageView的宽高:以图片的中心点和ImageView的中心点为基准,按照图片的原大小居中显示,不缩 ...
- gdb常用
调试信息条件:-g或-gdbgcc -g -o test test.cgcc -ggdb3 -o test test.cggdb3告诉gcc,使用gdb的扩展产生调试符号.其中“3”表示使用的是第三 ...
- 怎样在IIS下配置PHP
首先下载Windows的PHP安装包.随后将该包解压至C:\PHP.完成上面的步骤后,将C:\php目录下的php.ini-dist文件改名为php.ini,然后拷到C:\Windows目录下. 用记 ...
- iOS边练边学--Segue数据逆传(用block代替delegate)
一.block与方法的异同点: 相同点是都是保存代码段,什么时候执行,什么时候调用 不同点是block不受类或者对象的约束:方法收到了类或者对象的约束 二.思路:(通讯录练习) 在联系人控制器中,添加 ...
- java判断邮件是否发送成功
http://www.cnblogs.com/winner-0715/p/5136392.html
- 二叉树的java实现
一.分析 一个二叉树节点有三个部分,一个是指向左子树的部分,一个是指向右子树的部分,另外一个是数据部分.可以把这个节点抽象成一个节点对象,给对象有两个节点对象属性和一个数据属性.如下图: 一个二叉树有 ...
- jQuery.Form插件介绍
一.前言 jQuery From插件是一个优秀的Ajax表单插件,使用它可以让你非常容易地.无侵入地升级HTML表单以支持Ajax.jQuery From有两个主要方法:ajaxForm和ajaxS ...
- [mysql] 关联查询sql记录
//查询账单关联订单 select o.id as id, o.order_no as orderNo, o.case_no as caseNo, o.send_time as sendTime, o ...
- [HTML] 使用size和maxlength分别控制文本框宽度和输入字符数的限制
① size一般可以直观的看到,就是文本框的宽度,只能决定文本框的宽度,也就是可以看到的字符的个数. 如:size="5" 这意味着如果输入 我的国家是北京 那么只能看见 我 ...
- 搭建Grunt集成环境开发SASS
先行下载安装Ruby和SASS 再下载并安装node.js,已经集成了NPM 命令行查看是否安装成功 node -v npm -v 命令行安装grunt npm install -g grunt-cl ...