排序
来源:互联网 发布:linux 源码 mysql 编辑:程序博客网 时间:2024/05/29 16:30
1 、对map排序
public static<K,V> Map<K,V> sortMapValue(Map<K,V> map,final String...fields){ Map<K,V> tempmap=new LinkedHashMap<K,V>(); Set<Entry<K,V>> set=new TreeSet<Entry<K,V>>(new Comparator<Entry<K,V>>() { @Override public int compare(Entry<K, V> o1, Entry<K, V> o2) { int valflag=0; final String ClassName=o1.getValue().getClass().getSimpleName();//得到V的类型 int keyflag=o1.getKey().toString().compareTo(o2.getKey().toString()); //比较基本类型和String类型 if(ClassName.equals("String")||ClassName.equals("Byte")||ClassName.equals("Character")||ClassName.equals("Short")|| ClassName.equals("Integer")||ClassName.equals("Long")||ClassName.equals("Float")||ClassName.equals("Double")){ valflag=vCompare(o1.getValue(), ClassName, o2.getValue(), ClassName); if(valflag!=0){ return valflag; }else{ return keyflag; } }else{//比较对象 if(fields!=null&&fields.length<=0){ return 0; } Class clazz1=o1.getValue().getClass(); Class clazz2=o2.getValue().getClass(); for(String field:fields){ try { Field f1=clazz1.getDeclaredField(field); Field f2=clazz2.getDeclaredField(field); f1.setAccessible(true); f2.setAccessible(true); valflag=vCompare(f1.get(o1.getValue()), f1.getType().getSimpleName(), f2.get(o2.getValue()), f2.getType().getSimpleName()); if(valflag!=0){ return valflag; }else{ return keyflag;//先假设只有一个比较参数 } } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); }catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } return valflag; } }); for(Map.Entry<K, V> entry:map.entrySet()){ set.add(entry); } map.clear(); for(Entry<K,V> entry:set){ // System.out.println("#"+entry.getKey()+":"+entry.getValue()); tempmap.put(entry.getKey(), entry.getValue()); map.put(entry.getKey(), entry.getValue());//如果是LinkedHashmap的话就不用在调用的时候赋值了,否则需要重新赋值 } return tempmap; } /**' * * @param <V>值的类型 * @param v1 值1 * @param type1 值的 * @param v2 * @param type2 * @return */ public static<V> int vCompare(V v1,String type1,V v2,String type2){ int valflag=0; if(type1.equalsIgnoreCase("String")){ return v1.toString().compareTo(v2.toString()); }else if(type1.equalsIgnoreCase("Byte")||type1.equalsIgnoreCase("Character")||type1.equalsIgnoreCase("Short")||type1.equalsIgnoreCase("Integer") ||type1.equalsIgnoreCase("Long")||type1.equalsIgnoreCase("Float")||type1.equalsIgnoreCase("Double")||type1.equalsIgnoreCase("int") ||type1.equalsIgnoreCase("char")){ valflag=(int)(Double.parseDouble(v1.toString())-Double.parseDouble(v2.toString())); // System.out.println(v1.toString()+":"+v2.toString()); // System.out.println(valflag+":"+(Double.parseDouble(v1.toString())+":"+Double.parseDouble(v2.toString()))); return valflag; } return 0; } }
0 0
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 第八周拓展实践(3)换分币
- node js 进阶-node的多核实现
- Part 63 - mvc 分页
- 地图坐标转换 -- 火星坐标与GPS坐标
- android 使用shape 画虚线
- 排序
- 计算手续费
- Java学习之InputStream中read()与read(byte[] b)
- Spring IOC设计原理解析:本文乃学习整理参考而来
- 同步工具类--闭锁、信号量、栅栏的总结
- 关于利用JDBC连接sqlserver中数据库的问题
- mysql主从数据库同步和字符集问题
- Linux进程间通信——使用共享内存
- 【C/C++开发】【Java开发】JNI的替代者—使用JNA访问Java外部功能接口