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 有时候需要对对象列表或数组进行排序, ...
随机推荐
- java中volatile关键字的含义<转>
在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语 ...
- iscsi线缆
- HTTP API 设计指南(结尾)
前言 这篇指南介绍描述了 HTTP+JSON API 的一种设计模式,最初摘录整理自 Heroku 平台的 API 设计指引 Heroku 平台 API 指引. 这篇指南除了详细介绍现有的 API 外 ...
- imx6 android4.2 编译
编译imx6dl android4.2的镜像,记录编译的命令. Build Android Image # Build Android images for i.MX6 SABRE-SD boards ...
- ZooKeeper的架构
ZooKeeper的架构 看看下面的图表.它描述了ZooKeeper的“客户端-服务器架构”. 作为ZooKeeper架构的一部分的每个组件在下表中进行了说明. 部分 描述 Client(客户端) 客 ...
- sdi 采集卡---环视频拼接直播方案
http://www.upano.cn/# 360度无死角直播1080p 30fps http://search.jd.com/Search?keyword=sdi%E9%87%87%E9%9B%86 ...
- mysql分组取每组大的记录
SELECT a.* FROM chat_log a INNER JOIN (SELECT MAX(id) id,to_user FROM chat_log GROUP BY to_user)b ON ...
- jquery-根据现有结果集得到另一个结果集(后代、祖先或兄弟元素)
1.获取后代元素 1)children() 不传参数:得到结果集内所有元素的子元素 传入选择器:得到结果集内元素的匹配传入选择器的子元素 2)find() 传入选择器:得到匹配选择器的后代元素 传入j ...
- UltraEdit-32 查看编码
一直苦于无法判断文件的编码类型,现在发现一个方法,就是用强大的UltraEdit-32软件: UltraEdit-32的状态栏可以显示文件的编码类型,详细情况如下: ANSCI------------ ...
- jQuery使用cookie与json简单实现购物车功能
本文实例讲述了jQuery使用cookie与json简单实现购物车的方法.分享给大家供大家参考,具体如下: 1.生成一个cookie 用来存储商品的id String类型 2.添加商品id的时候 把 ...