根据一些特定的规则,我们可以利用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基础---->多个排序的拓展的更多相关文章

  1. Java基础-数组常见排序方式

    Java基础-数组常见排序方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数据的排序一般都是生序排序,即元素从小到大排列.常见的有两种排序方式:选择排序和冒泡排序.选择排序的特 ...

  2. 【java基础】选择排序and冒泡排序

    前言 : 今天学习的是J2SE视频里的第五章,数组部分,它里面留了一个经典的作业,就是让我们去从1倒9按一定规格排序,这让我想起了学习vb的时候最最让我头疼的两种排序方法,选择排序法 和 冒泡排序法. ...

  3. java基础之 重排序

    重排序通常是编译器或运行时环境为了优化程序性能而采取的对指令进行重新排序执行的一种手段.重排序分为两类:编译期重排序和运行期重排序,分别对应编译时和运行时环境. 在并发程序中,程序员会特别关注不同进程 ...

  4. 蓝桥网试题 java 基础练习 数列排序

    ---------------------------------------------------------------------------------------------------- ...

  5. java基础---数组的排序算法(3)

    一.排序的基本概念 排序:将一个数据元素集合或序列重新排列成按一个数据元素某个数据项值有序的序列 稳定排序:排序前和排序后相同元素的位置关系与初始序列位置一致(针对重复元素来说,相对位置不变) 不稳定 ...

  6. 【Java基础】选择排序、冒泡法排序、二分法查找

    1.选择排序: //改进后的选择排序,减少交换的次数 public static void sortSelect(int arr[]) { //用于存放最小数的下标 int s; for (int i ...

  7. Java基础系列--桶排序

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/9045967.html 1.算法简介 桶排序可以算是最简单快速的排序算法了,只是限定条件要多 ...

  8. Java基础复习笔记基本排序算法

    Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...

  9. Java基础教程:对象比较排序

    Java基础教程:对象比较排序 转载请标明出处:http://blog.csdn.net/wangtaocsdn/article/details/71500500 有时候需要对对象列表或数组进行排序, ...

随机推荐

  1. Google Guava 库用法整理<转>

    参考: http://codemunchies.com/2009/10/beautiful-code-with-google-collections-guava-and-static-imports- ...

  2. Linux启动与禁止SSH用户及IP的登录

    以下就针对SSH方面讨论一下.假设有人特别关注Linux环境的安全性,第一就从login方面来进行讨论 1:Linux启动或禁止SSH root用户的登录 2:Linux限制SSH用户 事实上这些东西 ...

  3. div 背景自适应

    .bg { background: url(images/title_bg.jpg); filter: "progid:DXImageTransform.Microsoft.AlphaIma ...

  4. Hibernate- 子查询

    01.搭建开发环境 02.子查询 package com.gordon.test; import java.util.List; import org.hibernate.Session; impor ...

  5. 总结一发linux常用命令

    显示目录和文件的命令 Ls:用于查看所有文件夹的命令. Dir:用于显示指定文件夹和目录的命令   Tree: 以树状图列出目录内容 Du:显示目录或文件大小 修改目录,文件权限和属主及数组命令 Ch ...

  6. 【转】【OPenGL】OPenGL 画图板-- 中点算法画圆

    为了能以任意点为圆心画圆,我们可以把圆心先设为视点(相当于于将其平移到坐标原点),然后通过中点法扫描转换后,再恢复原来的视点(相当于将圆心平移回原来的位置). 圆心位于原点的圆有四条对称轴x=0,y= ...

  7. (转)YV12 and NV12

    用videoCapture和IAMStreamConfig拿到的支持的格式列表.发现支持2中图像格式,YV12和NV12.具体是怎么样的内存分布不知道.查了些文档.自己修改了几个图.看出了点端倪 YV ...

  8. JS中setInterval、setTimeout不能传递带参数的函数的解决方法

    setInterval 和 setTimeout 这两个函数比较好用,但会遇到比如说我隔个几秒后要执行的函数是带参数的,这种情况怎么办?可以用匿名函数包装处理 //不带参数的函数 function t ...

  9. 谷哥的小弟学后台(04)——MySQL(4)

    探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 具体解释Android主流框架不可或缺的基石 站在源代码的肩膀上全解Scroller工作机制 Android多分辨率适 ...

  10. php Laravel 框架之建立后台目录

    今天研究了在Laravel框架中的控制器中加入后台的目录.发现了一些小的规律,拿来和大家分享一下吧. 通常情况下,我们是直接在controllers目录中加入我们的控制器,然后再routes.php ...