首页 > 其他分享 >List<Map<String, Object>> 排序

List<Map<String, Object>> 排序

时间:2023-04-10 11:22:06浏览次数:37  
标签:map Comparator Map List age list put 排序

一、代码

public class Test {
    public static void main(String[] args) {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("name", "ZK");
        map.put("age", 13);

        Map<String, Object> map2 = new HashMap<String, Object>();
        map2.put("name", "ZA");
        map2.put("age", 15);

        Map<String, Object> map3 = new HashMap<String, Object>();
        map3.put("name", "CX");
        map3.put("age", 20);

        Map<String, Object> map4 = new HashMap<String, Object>();
        map4.put("name", "CX");
        map4.put("age", 18);

        List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
        list.add(map);
        list.add(map2);
        list.add(map3);
        list.add(map4);
        
        // 排序代码如下
        List<Map<String, Object>> collect = list.stream().sorted(Comparator.comparing(Test::comparingByName)
                                                                 .thenComparing(Comparator.comparing(Test::comparingByAge).reversed()))
                                                         .collect(Collectors.toList());
    }

    private static String comparingByName(Map<String, Object> map){
        return (String) map.get("name");
    }

    private static Integer comparingByAge(Map<String, Object> map){
        return (Integer) map.get("age");
    }
}

二、代码介绍

用到的一些Java8的东西
主要首先是stream了,list.stream()这里是把map的List集合变成map的流
然后就是Test::comparingByName这种中间加::表示方法引用
其次就是关键的stream.sorted()方法,参数是传一个比较器Comparator,这里由JDK自带的Comparator.comparing工具方法可以帮你构建一个按照xx属性进行比较的比较器,默认是升序
然后是比较器Comparator支持thenComparing方法,表示按照一定的比较顺序把各个比较连接起来比较
其次是比较器Comparator的reversed方法,可以让比较器的原始顺序逆序,这也正好满足题主需要按照age逆序排列的要求
最后就是collect()方法,把流的数据按照一定的方式收集起来,参数是一个收集器collector,这里用的是JDK自带的工具方法Collectors.toList把流的数据收集为集合

 

标签:map,Comparator,Map,List,age,list,put,排序
From: https://www.cnblogs.com/robots2/p/17302348.html

相关文章

  • 数组排序
    1#include<stdio.h>2voidsort1(ints[])3{4inti,j,t;5for(i=0;i<9;i++)6{7for(j=0;j<10;j++)8{9if(s[j]>s[j+1])10{11t=s[j];s[j]=s[j+1];s[j+1]=t;1......
  • 4月9日list的实现
    首先list不同于string和vector他是链式结构,所以需要对他的每个节点自定义.并且每个节点要包含上或下节点的指针.因为struct在c++中升级成了类所以她也需要几大默认函数,但同时他也适用结构体.于是图片中对节点进行了声明和完成了构造函数.完成了list节点的构造就要开始list类的......
  • Collection - LinkedList源码解析
    简介:LinkedList集合底层是一个双向链表结构,具有增删快,查询慢的特点,内部包含大量操作首尾元素的方法。适用于集合元素先入先出和先入后出的场景,在队列源码中被频繁使用。链表结构的节点新增、删除都非常简单,仅仅把前后节点的指向修改下就好了,所以LinkedList新增和删除速度很......
  • axios写了前端,如何从后台获取到List列表数据(涉及到JSON)
    问题描述我将前端写完之后,一直没有理解axios后台的写法,导致进度一直拖慢,这里我就来叙述一下我后来是怎么写出后台代码的吧,或者说,这样的后台代码是怎么写出来的!问题解决经过友友的点拨,这里就需要将我们的list数据转换成json数据;然后将转换好的json数据传到axios写出来的html页......
  • C# Linq俩个list<Datarow> 取差集,并自定义字段
    可以自定义类,也可以从参考官网文档:Enumerable.Except方法(System.Linq)|MicrosoftLearnList<DataRow>list1=newList<DataRow>();List<DataRow>list2=newList<DataRow>();DataTabledataTable=newDataTable();dataTable......
  • Arrays.asList使用的一些问题
    java.util.Arrays.asList()List是一种很有用的数据结构,如果需要将一个数组转换为List以便进行更丰富的操作的话,可以这么实现:String[]myArray={"Apple","Banana","Orange"};List<String>myList=Arrays.asList(myArray);List<String>myList=Arra......
  • arraylist集合的使用
             ......
  • * 编程:当前项目的根目录 c.txt 文件中的内容为”abddbskshlsjdhhhiw”;编写程序读取文
    1packageio.homework;23importjava.io.FileReader;4importjava.io.FileWriter;5importjava.io.Reader;6importjava.io.Writer;78publicclassq18{9publicstaticvoidmain(String[]args){10try(Readerfr=newFileReader......
  • P2824 [HEOI2016/TJOI2016]排序 题解
    题目传送门前言线段树好题!!!!咕咕了挺久的一道题目,很早之前就想写了,今天终于找了个时间A掉了。题意给定一个\(1\)到\(n\)的排列,有\(m\)次操作,分两种类型。1.0lr表示将下标在\([l,r]\)区间中的数升序排序。2.1lr表示将下标在\([l,r]\)区间中的数降序排序。给......
  • 算法学习之冒泡排序【C语言】
    冒泡排序排序规则冒泡排序的规则是相邻的两个数字依次比较,如果前面的数字比后面的数字大,则交换它们的位置,否则保持不变,直到遍历完所有的数字。这个过程会不断地进行,直到所有的数字都按照从小到大的顺序排列好。双层循环在冒泡排序的算法中,需要使用两层循环来实现排序功能。for(int......