Stream排序Map集合

最近小编自己一个人在负责一个项目的后台开发,其中有一部分是统计相关的功能,所以需要一些排序或者分组的操作,之前这种操作小编觉得还是比较麻烦的,虽热有一些现成的工具类,但是工具类的写法也是比较复杂的,但是如果使用java8 stream流的话就比较简单了,并且代码量会大大的减少,下面总结几个对map的操作。

1、map 根据value排序

Map<String,BigDecimal> map =new HashMap<>();
map.put("one", 0.08);
map.put("two", 0.1);
map.put("three", 0.2);
map.put("four", 0.91);

上面是项目中的一个中间结果,我们需要对这个map根据value值倒序排序,下面给出工具类:

public <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) {
    Map<K, V> result = new LinkedHashMap<>();

    map.entrySet().stream()
            .sorted(Map.Entry.<K, V>comparingByValue()
                    .reversed()).forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
    return result;
}

当然如果我们想根据map的key进行排序,需要对上面的工具类进行小小的修改,代码如下:

public <K extends Comparable<? super K>, V > Map<K, V> sortByKey(Map<K, V> map) {
Map<K, V> result = new LinkedHashMap<>();

    map.entrySet().stream()
            .sorted(Map.Entry.<K, V>comparingByKey()
                    .reversed()).forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
    return result;
}

我们可以看到,如果我们需要根据key排序,就需要让key 继承 Comparable ,也就说我们需要对待排序的字段继承 Comparable接口。另一个问题就是,上面的这种写法排序效果是 降序排序,如果我们需要升序排序的话,只需要将上面的.reversed()关键字限制去掉即可。

public <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) {
Map<K, V> result = new LinkedHashMap<>();

    map.entrySet().stream()
            .sorted(Map.Entry.<K, V>comparingByValue()
                    ).forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
    return result;
}

map根据value倒序排序

map.entrySet().stream().sorted(Collections.reverseOrder(Map.Entry.comparingByValue())).forEach(System.out::println);

?

map根据key倒序排序

map.entrySet().stream().sorted(Collections.reverseOrder(Map.Entry.comparingByKey())).forEach(System.out::println);

?

map根据value正序排序

map.entrySet().stream().sorted(Comparator.comparing(e -> e.getValue())).forEach(System.out::println);

?

map根据key正序排序

map.entrySet().stream().sorted(Comparator.comparing(e -> e.getKey())).forEach(System.out::println);

参考

原文链接:https://blog.csdn.net/hao134838/article/details/80780622
原文链接:https://blog.csdn.net/qq_41011894/article/details/88405944

原文地址:https://www.cnblogs.com/eternityz/p/12238979.html

时间: 2024-11-08 11:31:52

Stream排序Map集合的相关文章

利用stream对map集合进行过滤

最近公司在大张旗鼓的进行代码审核,从中也发现自己写代码的不好习惯.一次无意的点到了公司封装的对map集合过滤的方法,发现了stream.于是研究了一下.并对原有的代码再次结合Optional进行重构下 原有方法说明 主要处理过滤条件Map对象,过滤掉了null和空字符串 等操作 这里我简单画了个图,对这个过程总结 1.利用filter对null和空字符串进行过滤 2.利用map进行对于Stream中包含的元素使用给定的转换函数进行转换操作 3.collect进行聚合成map 由于公司的代码不合适

List,Set,Map集合的遍历方法

List的三种实现:ArrayList(数组)  LinkedList(链表)  Vector(线程安全) List集合遍历方法: List<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); /* * list遍历有三种方法:普通for 迭代器 增强for * */ //使用普通for遍历 f

java8新特性:对map集合排序

一.简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map.map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等.其中这四者的区别如下(简单介绍): HashMap:我们最常用的Map,HashMap是无序的,它根据key的HashCode 值来存储数据,根据key可以直接获取它的Value,同时它具有很快的访问速度.HashMap最多只允许一条记录的key值为Null(多条会覆盖);允许多条记录的Value为

Map集合按照value和key进行排序

最近由于特殊的业务需求,需要做相关数据排序,下面就贴出其中的将map集合中按照value或者key进行排序的代码,后面再具体详说. 1 /** 2 * map 集合排序 3 * @param map 4 * @return 5 */ 6 public static <K, V extends Comparable<? super V>> Map<K, V> sortMap(Map<K, V> map) 7 { 8 List<Map.Entry<K

Java Map集合利用比较器Comparator根据Key和Value的排序

TreeMap排序 根据Key进行排序 Map的根据key排序需要用到TreeMap对象,因为它是默认按照升序进行输出的,可以使用比较器compareTo对它进行降序排序,Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(T o1,To2)方法即可实现排序,该方法主要是根据第一个参数o1,小于.等于或者大于o2分别返回负整数.0或者正整数,若是按照升序可以直接省略比较器代码Map<String, String> treeMap = new

Java 实现Map集合排序功能

第一步:Map中新增sort临时键 // 初始化Map集合 List<Map<String, String>> columns = new ArrayList<Map<String, String>>(); Map<String, String> c1 = new HashMap<String,String>(); c1.put("sort", "8"); c1.put("title&

利用Java8 stream对Map排序

原文地址: https://blog.csdn.net/u013719012/article/details/82117477 import java.util.*; import java.util.stream.Collectors; public class Main2 { public static void main(String[] args) { Map<Integer, String> abcMap = new HashMap<>(); abcMap.put(19,

Map集合框架的使用

Map用于保存具有映射关系的数据(key-vlaue).Map的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较总是返回false Map中包含了一个keySet()方法,用于返回Map所以key组成的Set集合. Map集合与Set集合元素的存储形式很像,如Set接口下有HashSet.LinkedHashSet.SortedSet(接口).TreeSet.EnumSet等实现类和子接口,而Map接口下则有HashMap.LinkedHashMap.SortedMa

Map集合

在Map里面每一次可以存放两个对象,所有的对象按照“key = value”的形式保存.也就是说通过key可以找到对应的value. Collection存放数据的目的是为了输出,而Map存放数据的目的是为了查找. 在java.util中Map接口里面定义的方法如下: public V put(K key, V value) 普通 向Map集合之中保存数据 public V get(Object key) 普通 根据key取得对应的value数据 public boolean containsK