java map按照value值来比较大小并且返回最终结果2014-08-24
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;elsereturn 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。原文:http://www.zuidaima.com/share/1830834176347136.htm