根據Value對Map中的對象進行排序
阿新 • • 發佈:2017-09-30
value rabl 使用 .html stat pre 背景 添加 ash
背景
SortedMap的實現類TreeMap可以按自然順序或自定義順序遍歷鍵(key),有時我們需要根據值(Value)進行排序,本文提供了一種簡單實現思路。
實現
-
Comparator接口
使用Value排序時,仍然使用TreeMap實現類,只不過需要在TreeMap的構造函數中引入Comparator實現。 -
TreeMap構造器
ValueComparator是Comparator接口的實現,該實現包含了一個普通的Map對象作為成員變量,並在compare方法中做了一點手腳。即在compare方法中,將key的比較轉換為value的比較。 - 局限性
這種方式只能對Map進行排序,而不能添加單個key-value映射。
-
具體實現代碼
import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; /** * Created by liutingna on 2017/9/30. */ public class TestComparator { class ValueComparator implements Comparator<String> { Map<String, Long> base; //Comparator外部比較器 public ValueComparator(Map<String, Long> base) { this.base = base; } //根據Map的值進行比較 public int compare(String a, String b) { return base.get(a).compareTo(base.get(b)); } } public static void main(String[] args) { Map<String, Long> map = new HashMap<>(); TestComparator testComparator = new TestComparator(); TestComparator.ValueComparator valueComparator = testComparator.new ValueComparator(map); Map<String, Long> keySortMap = new TreeMap<>(); Map<String, Long> valueSortMap = new TreeMap<>(valueComparator); map.put("aaa", 15L); map.put("bxw", 13L); map.put("abc", 14L); map.put("bbb", 18L); System.out.println(map);//{aaa=15, bxw=13, abc=14, bbb=18} //根據key進行比較 keySortMap.putAll(map); System.out.println(keySortMap);//{aaa=15, abc=14, bbb=18, bxw=13} //根據value進行比較 valueSortMap.putAll(map); // valueSortMap.put("ccc",17L);//NullPointerException,這種方式只能對Map進行排序,而不能添加單個key-value映射 System.out.println(valueSortMap);//{bbb=18, aaa=15, abc=14, bxw=13} } }
相關資料
Comparable和Comparator的區別
根據Value對Map中的對象進行排序