1. 比较器实现
/**
* TreeMap比较器(根据键值结合排序)
*
*/
public class ByValueComparator implements Comparator<Entry<String, Map<String,String>>>{
private Map<String,Integer> bankCodeMap = new HashMap<String,Integer>();
private Map<String,Integer> valueMap = new HashMap<String,Integer>();
private int bankWeight = 0;
private int B2BWeight = 0;
public ByValueComparator(){
bankCodeMap.put("ICBC", 1);
bankCodeMap.put("CCB", 2);
bankCodeMap.put("ABC", 3);
}
@Override
public int compare(Entry<String, Map<String, String>> o1,
Entry<String, Map<String, String>> o2) {
Map<String,String> value1 = o1.getValue();
Map<String,String> value2 = o2.getValue();
if(olnyContainsB2B(value1) && olnyContainsB2B(value2)){
return getB2BWeight(o1.getKey()) - getB2BWeight(o2.getKey());
}else if(olnyContainsB2B(value1) || olnyContainsB2B(value2)){
if(olnyContainsB2B(value1)){
return 1;
}else{
return -1;
}
}else{
return getBankWeight(o1.getKey()) - getBankWeight(o2.getKey());
}
}
/**
* 判断是否只包含B2B
* @param map
* @return
*/
private boolean olnyContainsB2B(Map<String,String> map){
boolean flag = false;
if(map == null){
return flag;
}
if(map.size() == 1 && map.get("20") != null){
flag = true;
}
return flag;
}
/**
* 获取B2B权重
* @param key
* @return
*/
private int getB2BWeight(String key){
Integer value = valueMap.get(key);
if(value == null){
value = B2BWeight;
valueMap.put(key, value);
B2BWeight++;
}
return value;
}
/**
* 获取银行代码权重
* @param key
* @return
*/
private int getBankWeight(String key){
Integer value = bankCodeMap.get(key);
if(value == null){
if(bankWeight == 0){
bankWeight = Collections.max(bankCodeMap.values()) + 1;
}else{
bankWeight = bankWeight + 1;
}
value = bankWeight;
bankCodeMap.put(key, value);
}
return value;
}
}
2.测试代码
TreeMap<String,Map<String,String>> treeMap = new TreeMap<String,Map<String,String>>();
Map<String,String> map1 = new HashMap<String,String>();
map1.put("10", "B2C_map1");
map1.put("20", "B2B_map1");
Map<String,String> map2 = new HashMap<String,String>();
map2.put("20", "B2B_map2");
Map<String,String> map3 = new HashMap<String,String>();
map3.put("20", "B2B_map3");
Map<String,String> map4 = new HashMap<String,String>();
map4.put("13", "Express_map4");
treeMap.put("UOP", map1);
treeMap.put("HP", map2);
treeMap.put("ICBC", map3);
treeMap.put("ABC", map4);
treeMap.put("CCB", map1);
treeMap.put("GDB", map3);
ByValueComparator bvc = new ByValueComparator();
List<Entry<String, Map<String,String>>> newList=new ArrayList<Entry<String, Map<String,String>>>(treeMap.entrySet());
Collections.sort(newList, bvc);
for(Map.Entry<String, Map<String,String>> tempMap:newList){
System.out.println(tempMap);
}
分享到:
相关推荐
TreeMap按VALUE排序
本资源提供了List对对象中的属性和TreeMap, String>对键值排序,并针对100w条数据排序,对比List和TreeMap, String>排序的效率。个人认为排序效率对比可以相信,但也可能存在不科学之处,还请高手给与指点,多多包涵...
在JavaEE中 TreeMap排序的问题
TreeMap自己的理解
C#实现的树图和放射环算法,信息可视化领域
主要介绍了Java TreeMap排序算法,结合实例形式分析了TreeMap排序算法的原理、实现方法与相关注意事项,需要的朋友可以参考下
JAVA中用TREEMAP做的,可以求学生的总分,总分的平均值,最大值最小值
treeMap实现分组数据树形结构,在通过Redis和MySQL数据库ID生成序列ID
Python TreeMap可视化方案数据源(因为不能粘贴链接额,具体实现实现代码,请看我博客专栏《机器学习》:))
在eclipse上用java实现统计一句话或一段话中单词出现的个数,并按照字母表顺序输出,并利用treemap实现
vue 2.x echarts treemap带示例数据及效果图,及在对话框里显示的处理方法
Treemap-4.1.2.zip tree map开发代码,可用于创建tree map
TreeMap源码是基于数据结构中的红黑树进行设计并开发的。
实现由 Mark Bruls、Kees Huizing 和 Jarke J. van Wijk 发布的 Squarified Treemap 算法。 用途 假设我们有一个宽度为 6、高度为 4 的矩形,并且进一步假设这个矩形必须细分为 7 个矩形,面积分别为 6、6、4、3、2...
TreeMap例子GDP
Java TreeMap源码解析 Java TreeMap源码解析 Java TreeMap源码解析
HashMap里面的元素是无序的,要进行排序的话只能是用TreeMap和SortedMap,java实现的map排序
Python_TreeMap_可视化方案数据源(因为不能直接粘贴链接,所以实现代码,请移步看我博客专栏《机器学习》)
treemap treeset hashset hashmap 简要介绍
TreeMap是一种基于红黑树实现的有序映射(SortedMap)。它实现了NavigableMap接口,可以按照键的自然顺序或自定义排序规则对键值对进行排序和访问。