首页 > 其他分享 >TreeMap排序

TreeMap排序

时间:2024-02-16 14:56:33浏览次数:30  
标签:Map String People List TreeMap new 排序

实现TreeMap后默认为key升序排序,如果要实现key其他排序规则,可以使用Comparator对象作为参数,前提是key为可以排序的类型(String,int等类型)

1 Map<String,People> map = new TreeMap<>(new Comparator<String>() {
2     @Override
3     public int compare(final String o1, final String o2) {
4         return o2.compareTo(o1);
5     }
6 });

如果要实现TreeMap的value值排序,可以将Map转List后排序,在将排序后的List转回Map时,需要在toMap里增加LinkedHashMap::new,如果不指定LinkedHashMap,会使排序的效果丢失

 1 People people1 = new People("1","1");
 2 People people2 = new People("2","6");
 3 People people3 = new People("3","6");
 4 People people4 = new People("3","4");
 5 Map<String,People> map = new TreeMap<>();
 6 map.put("6",people1);
 7 map.put("9",people2);
 8 map.put("2",people3);
 9 map.put("1",people4);
10 //Map转List
11 List<Map.Entry<String,People>> entryList = new ArrayList<>(map.entrySet());
12 //排序List,按照value里的no字段升序排序
13 List<Map.Entry<String,People>> sortList = entryList.stream().sorted(Comparator.comparing(o1 -> o1.getValue().getNo())).collect(Collectors.toList()); 
14 //List转Map,不指定LinkedHashMap,当前sortMap排序效果会丢失,转后的Map默认按照key升序
15 Map<String,People> sortMap = sortList.stream().collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
16 //List转Map,指定LinkedHashMap::new,转后的Map排序效果仍然在
17 Map<String,People> sortMap1 = sortList.stream().collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,(i1,i2)->i2,LinkedHashMap::new)); 
18 System.out.println("entryList:"+  JsonUtils.toJson(entryList));
19 System.out.println("sortList:"+  JsonUtils.toJson(sortList));
20 System.out.println("sortMap:"+  JsonUtils.toJson(sortMap));
21 System.out.println("sortMap1:"+  JsonUtils.toJson(sortMap1));
22 
23       
24 //People类
25 static class People{
26     public People(String no,String age) {
27         this.no = no;
28         this.age = age;
29     }
30     public String no;
31     public String age;
32 
33     public String getNo() {
34         return no;
35     }
36 
37     public String getAge() {
38         return age;
39     }
40 
41 }

 

 

标签:Map,String,People,List,TreeMap,new,排序
From: https://www.cnblogs.com/zeevy/p/18017135

相关文章

  • 归并排序模板
    #include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;intn,s[N],res[N];voidmerge_sort(ints[],intl,intr){intmid=(l+r)>>1;if(l>=r)return;merge_sort(s,l,mid);merge_sort(s,mid+1,r);inti=l,k=0,j......
  • chapter3-排序和查找2
    2.基础查找所谓查找,就是在查找空间中找寻符合要求的解的过程。查找方法有多种,下面简单介绍3种。不同的策略对查找的效率和结果有不同的影响。2.1线性查找从首元素开始,遍历整个序列,直到找到目标元素,则结束算法;或者遍历完序列还没有匹配,则查找失败结束算法。时间复杂度为O(n)。......
  • 拓扑排序入门
    目录写在前面一些概念算法步骤字典序最大/最小的拓扑序列?模板例题3704.排队家谱树奖金P1983[NOIP2013普及组]车站分级1639.拓扑顺序写在前面昨晚cfdiv3的F就是一道基本上可以说板子的拓扑排序的题目,没有做出来感觉图论很早之前就看了,但是基本没有刷过什么题,开始补一下图论......
  • 912.排序数组--插入排序
    1.题目介绍给你一个整数数组nums,请你将该数组升序排列。示例1:输入:nums=[5,2,3,1]输出:[1,2,3,5]示例2:输入:nums=[5,1,1,2,0,0]输出:[0,0,1,1,2,5]2.题解2.1插入排序思路主要思路就是创建一个有序区域和无序区域,不断从无序区域取一张出来顺序插入有序区域即可代......
  • 912.排序数组--冒泡排序
    1.题目介绍给你一个整数数组nums,请你将该数组升序排列。示例1:输入:nums=[5,2,3,1]输出:[1,2,3,5]示例2:输入:nums=[5,1,1,2,0,0]输出:[0,0,1,1,2,5]2.题解2.1冒泡排序思路跟选择排序,固定一个i,后续者不断打擂台挑战不同,冒泡排序永远是两个邻接值比较,较大值不断向后冒......
  • 912.排序数组--选择排序
    1.题目介绍给你一个整数数组nums,请你将该数组升序排列。示例1:输入:nums=[5,2,3,1]输出:[1,2,3,5]示例2:输入:nums=[5,1,1,2,0,0]输出:[0,0,1,1,2,5]2.题解2.1插入排序思路打擂台,每次确定第一名,第二名,第三名,依次往后代码#include<bits/stdc++.h>usingnamespace......
  • 排序
    一、选择排序voidselection_sort(int*arr,intL,intR){for(inti=L;i<R;i++){intind=i;for(intj=i+1;j<R;j++)if(arr[j]<arr[ind])ind=j;swap(arr[i],arr[ind]);}}二、插入排序......
  • 排序(待填充)
    题目描述为了快速地把修罗王和邪狼从混乱的队伍中找出来,典狱长准备对排队的囚犯进行从小到大的按编号排序,但是他不知道用哪一种排序方法最合适,因此他准备请教前来协助的高级魔法师张琪曼和楚继光。输入共两行,第一行为一个数N(N≤100000),即排队的总人数,第二行为N个数,即每......
  • 【算法】排序
    冒泡排序思想:每一轮确定一个最大值移到最右边。点击查看代码for(inti=n;i>=1;i--){ for(intj=1;j<i;j++){ if(a[j]>a[j+1])swap(a[j],a[j+1]); } }选择排序思想:与冒泡相似。点击查看代码for(inti=n;i>=1;i--){ intmax_id......
  • 各大排序的模板
    1.冒泡排序 1for(i=n;i>=1;--i)2{3for(j=1;j<=i;++j)4{5if(a[j]>a[j+1])6{7swap(a[j],a[j+1]);8}9}10}   2.快速排序1.懒人函数 1sort(a+1,a+n+1);   2.正常的1vo......