最代码官方的gravatar头像
最代码官方 2014-05-20 18:03:44

java map按照value值来比较大小排序并且返回最终结果

package com.zuidaima.util;

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class ValueComparator implements Comparator<Long> {

	Map<Long, Double> base;

	public ValueComparator(Map<Long, Double> base) {
		this.base = base;
	}

	public int compare(Long a, Long b) {
		if (base.get(a).doubleValue() >= base.get(b).doubleValue()) {
			return -1;
		} else {
			return 1;
		}
	}

	public static <K, V extends Comparable<V>> Map<K, V> sortByValues(
			final Map<K, V> map) {
		Comparator<K> valueComparator = new Comparator<K>() {
			public int compare(K k1, K k2) {
				int compare = map.get(k2).compareTo(map.get(k1));
				if (compare == 0)
					return 1;
				else
					return compare;
			}
		};
		Map<K, V> sortedByValues = new TreeMap<K, V>(valueComparator);
		sortedByValues.putAll(map);
		return sortedByValues;
	}

	public static void main(String[] args) {
		HashMap<Long, Double> map = new HashMap<Long, Double>();
		map.put(1l, 99.5);
		map.put(2l, 67.2);
		map.put(3l, 67.5);
		map.put(4l, 67.6);

		ValueComparator bvc = new ValueComparator(map);
		TreeMap<Long, Double> sorted_map = new TreeMap<Long, Double>(bvc);

		System.out.println("unsorted map: " + map);

		sorted_map.putAll(map);

		System.out.println("results: " + sorted_map);

		Map<Long, Double> sorted_map2 = sortByValues(map);
		
		System.out.println("results2: " + sorted_map2);
	}
}

输出结果:

unsorted map: {1=99.5, 2=67.2, 3=67.5, 4=67.6}
results: {1=99.5, 4=67.6, 3=67.5, 2=67.2}
results2: {1=99.5, 4=67.6, 3=67.5, 2=67.2}

 

通过key比较大小的原理类似,大家改写下就好了。enjoy it。


打赏

最代码最近下载分享源代码列表最近下载
最代码最近浏览分享源代码列表最近浏览
浪里格朗  LV4 2023年1月31日
huaua7676  LV30 2021年9月2日
lllpppwww  LV5 2020年3月25日
弥尘123456  LV4 2020年2月19日
luohaipeng  LV23 2019年11月19日
aa493821228  LV4 2019年5月30日
Luis虎子  LV16 2019年5月9日
maiyatang520  LV1 2019年4月25日
daixiaowei  LV1 2019年4月16日
小周晴  LV6 2019年1月24日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友