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 有时候需要对对象列表或数组进行排序, ...
随机推荐
- IPC介绍——10个ipcs例子
IPC介绍——10个ipcs例子 semaphorearrays2010performancesystemaccess ipcs是一个uinx/linux的命令.用于报告系统的消息队列.信号量.共享内 ...
- linux内存查看及释放
查看内存 常用的查看内存工具有:top,ps,free,/proc/meminfo,/proc/$PID/status等,一般都指定了虚拟内存占用情况,但ps或/proc/$PID/status中RS ...
- android学习日记01--综述
开个博客,写点关于Android的知识,希望温故而知新吧! 一.总体框架 先上一张google提供官方的Android框架图: Android系统架构由5部分组成,分别是:Linux Kernel.A ...
- 为什么手机无法执行应用? Values之谜
欢迎Follow我的GitHub, 关注我的CSDN, 精彩不断! CSDN: http://blog.csdn.net/caroline_wendy/article/details/68923156 ...
- 预留端口避免占用ip_local_reserved_ports
问题描述: 业务遇到这个情况,在重启服务时,出现1986端口被占用而无法启动,非得等该端口释放后才启动成功. 问题分析: 1986端口被该服务器上的客户端随机选取源端口给占用掉了. 解决方案: 使 ...
- DataGridView使用技巧七:列顺序的调整、操作行头列头的标题
一.列顺序的调整 设定DataGridView的AllowUserToOrderColumns为True的时候,用户可以自由调整列的顺序. 当用户改变列的顺序的时候,其本身的Index不好改变,但是D ...
- C#捕获鼠标消息
在C#中怎样禁用鼠标按键,我们可以通过ImessageFilter接口下的PreFilterMessage方法.Application类的AddMessageFilter方法,RemoveMessag ...
- sql server merge 的用法
CREATE TABLE tTable ( id INT , f1 VARCHAR(10) , f2 VARCHAR(10) , f3 VARCHAR(10) ) GO INSERT INTO tTa ...
- Unity-Animator(Mecanim)深入系列总索引
花了不少时间完成了这篇Unity Animator学习系列文章,其中大多数内容都来自个人实践,包括API部分很多都是亲测,期望和网上的诸多教程达到互补. 相关参考文档 Unity Animator官方 ...
- failed to push some refs to 'git@github.com:*/learngit.git'
https://jingyan.baidu.com/article/f3e34a12a25bc8f5ea65354a.html 出现错误的主要原因是github中的README.md文件不在本地代码目 ...