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——单例模式
详细的各种模式 http://mobile.51cto.com/android-419145.htm http://wenku.baidu.com/link?url=f3yjQ6YvslvHcWJLb ...
- Android——菜单和进度条
xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...
- CMake 使用方法
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的 ...
- IE6、IE7、IE8、Firefox兼容性
整理关于IE6.IE7.IE8.Firefox兼容性CSS HACK问题 1.区别IE和非IE浏览器CSS HACK代码 #divcss5{background:blue; /*非IE 背景藍色*/b ...
- dubbo 常见错误 通配符的匹配很全面, 但无法找到元素 'dubbo:application' java.lang.reflect.MalformedParameterizedTypeException 通配符的匹配很全面, 但无法找到元素 'dubbo:application' 的声明。 Unsupported major.minor version 52.0 (unable to l
dubbo 常见错误 1. Caused by: java.lang.reflect.MalformedParameterizedTypeException 启动时报错,原因是dubbo 依赖 spr ...
- r语言 技巧总结
1.table函数返回众数,再转为dataframe as.data.frame(table(x)) 2.使用which 返回数组下标 which(rs.list=="rs1008507&q ...
- 利用Powershell自动部署asp.net mvc网站项目 (一)
这一篇中我们会写一些关于自动化部署的代码.我们会使用 Powershell 书写这类代码. 你将发现这篇文章中涉及的东西非常具体,有的要求甚至相当苛刻且可能不具有通用性.这是因为部署从来都是跟环境打交 ...
- C# 将RichTextBox中内容的文档以二进制形式存
private void button1_Click(object sender, EventArgs e) { System.IO.MemoryStream mstream = new ...
- git call failed: [git clone Could not resolve host: git.openstack.org
git config --global http.proxy $http_proxy git config --global https.proxy $https_proxy ref: http:// ...
- WAMP环境下配置虚拟主机
1.编辑httpd.conf,查找#Include conf/extra/httpd-vhosts.conf,把前面注释符号“#”删掉 2.编辑httpd-vhosts.conf文件, <Vir ...