根据Value对Map中的对象进行排序

背景

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的区别

时间: 2024-07-29 03:13:04

根据Value对Map中的对象进行排序的相关文章

Map中按value值排序

大家都知道,在java中的集合Map中按键值key排序比较简单,只需引用集合TreeMap即可,可是怎样实现按value值排序呢?下面我们来测试一下: public class TestHashMap { public static void main(String[] args) { Map<String, Integer> map = new HashMap<String, Integer>(); map.put("zhangsan", 1); map.pu

获取map中根据key进行排序的value数据

今天做的项目中遇到了获取map中根据key进行排序的value数据,key中保存的内容是字符串类型.      map的知识点好久没用有点生疏,不知道怎么去使用.看看之前同事写的map根据key排序的代码,发现他是先把key都取出来封装到一个List中,然后用Collections.sort方法对List排序,按照排完序的顺序去除value顺序加入到一个新的List中.感觉此种方式的循环次数太多,于是上网找找能不能直接排序的方法,看见有人写直接保存到TreeMap中的数据就能实现按照进行排序的功

对list集合中的对象进行排序(转载)

原文链接:http://blog.csdn.net/veryisjava/article/details/51675036 Collections对List集合中的数据进行排序 有时候需要对集合中的元素按照一定的规则进行排序,这就需要用到 Java中提供的对集合进行操作的工具类Collections,其中的sort方法 先看一个简单的例子: public static void main(String[] args) { List<Integer> nums = new ArrayList&l

Golang对map中的key进行排序

package main import ( "fmt" "sort" ) func main() { //首先生成26个字母充当map中的key var a = 'a' var m map[string]int = make(map[string]int) for i := 0; i < 26; i++ { // fmt.Printf("%c", a) //%c 是输出字符 key := fmt.Sprintf("%c"

对元素为map的list按map中的值进行排序

Collections.sort(list, new Comparator<Map<String, Object>>() { @Override public int compare(Map<String, Object> o1, Map<String, Object> o2) { Integer value1 = 0; Integer value2 = 0; for (String key : o1.keySet()) { value1 = (Intege

根据List集合中的对象属性排序

首先创建一个Student对象,里面有三个属性,分别是int类型,String类型,Date类型 package com.sinoway.cisp.test; import java.text.SimpleDateFormat; import java.util.Date; public class Student { private int age; private String name; private Date birthday; public int getAge() { return

stream根据map中的一个字段排序

org = org.stream().sorted(Comparator.comparing(SynchronousDataService::sort2)).collect(Collectors.toList());// 排序 private static String sort2(Map<String, Object> a) {  return (String) a.get("uri"); } 原文地址:https://www.cnblogs.com/sikuaiwu/p

对NSArray中自定义的对象进行排序

本文译自How to sort NSArray with custom objects. 我们开发的每个程序都会使用到一些数据,而这些数据一般被封装在一个自定义的类中.例如一个音乐程序可能会有一个Song类,聊天程序则又一个Friend类,点菜程序会有一个Recipe类等.有时候我们希望在程序中显示的列表数据是按照一定顺序进行排列的,本文我们就来看看在iOS中有哪些方法可以对NSArray中的对象进行排序.下面是目录: 小引 使用NSComparator进行排序 使用NSDescriptor进行

iOS中对NSArray中自定义的对象进行排序

本文译自How to sort NSArray with custom objects. 我们开发的每个程序都会使用到一些数据,而这些数据一般被封装在一个自定义的类中.例如一个音乐程序可能会有一个Song类,聊天程序则又一个 Friend类,点菜程序会有一个Recipe类等.有时候我们希望在程序中显示的列表数据是按照一定顺序进行排列的,本文我们就来看看在iOS中有哪些 方法可以对NSArray中的对象进行排序.下面是目录: 小引 使用NSComparator进行排序 使用NSDescriptor