Java按值排序Map(升序和降序)

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(310)   2023-06-26 07:54:18

使用 Java 8 Stream API 以升序和降序(反向)顺序按值对 Map 进行排序 的简单快速使用示例。

逻辑的中心是方法 Map.Entry.comparingByValue(),它按值的自然顺序比较 Map.Entry

使用流 API 按值对Map进行排序

在 java 8 中,Map.Entry 类有静态方法 comparingByValue() 来帮助您按值排序。此方法返回一个 Comparator,它按值的自然顺序比较 Map.Entry

或者,您可以传递自定义 Comparator 以用于排序。这可用于以相反的顺序对Map进行排序。

按升序排列

Map<String, Integer> unSortedMap = getUnSortedMap();
		
System.out.println("Unsorted Map : " + unSortedMap);

//LinkedHashMap preserve the ordering of elements in which they are inserted
LinkedHashMap<String, Integer> sortedMap = new LinkedHashMap<>();

unSortedMap.entrySet()
	.stream()
	.sorted(Map.Entry.comparingByValue())
	.forEachOrdered(x -> sortedMap.put(x.getKey(), x.getValue()));

System.out.println("Sorted Map   : " + sortedMap);

Output:

Unsorted Map : {alex=1, charles=4, david=2, brian=5, elle=3}
Sorted Map   : {alex=1, david=2, elle=3, charles=4, brian=5}

按降序排列

Map<String, Integer> unSortedMap = getUnSortedMap();
		
System.out.println("Unsorted Map : " + unSortedMap);

//LinkedHashMap preserve the ordering of elements in which they are inserted
LinkedHashMap<String, Integer> reverseSortedMap = new LinkedHashMap<>();

//Use Comparator.reverseOrder() for reverse ordering
unSortedMap.entrySet()
	.stream()
	.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) 
	.forEachOrdered(x -> reverseSortedMap.put(x.getKey(), x.getValue()));

System.out.println("Reverse Sorted Map   : " + reverseSortedMap);

Output:

Unsorted Map 		: {alex=1, charles=4, david=2, brian=5, elle=3}
Reverse Sorted Map  : {brian=5, charles=4, elle=3, david=2, alex=1}

完整示例

本例中使用的完整代码,供大家参考。

package com.cundage.spring;

import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

public class MapSortingExamples {

	public static void main(String[] args) {
		System.out.println("\nSorting using Java8 streams\n");
		
		sortByValueJava8Stream();
	}

	private static void sortByValueJava8Stream() 
	{
		Map<String, Integer> unSortedMap = getUnSortedMap();
		
		System.out.println("Unsorted Map : " + unSortedMap);

		LinkedHashMap<String, Integer> sortedMap = new LinkedHashMap<>();
		unSortedMap.entrySet().stream().sorted(Map.Entry.comparingByValue())
				.forEachOrdered(x -> sortedMap.put(x.getKey(), x.getValue()));
		
		System.out.println("Sorted Map   : " + sortedMap);
		
		LinkedHashMap<String, Integer> reverseSortedMap = new LinkedHashMap<>();
		unSortedMap.entrySet().stream().sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
				.forEachOrdered(x -> reverseSortedMap.put(x.getKey(), x.getValue()));
		
		System.out.println("Reverse Sorted Map   : " + reverseSortedMap);
	}

	private static Map<String, Integer> getUnSortedMap() 
	{
		Map<String, Integer> unsortMap = new HashMap<>();
		unsortMap.put("alex", 1);
		unsortMap.put("david", 2);
		unsortMap.put("elle", 3);
		unsortMap.put("charles", 4);
		unsortMap.put("brian", 5);
		return unsortMap;
	}
}


Output:

Sorting using Java8 streams

Unsorted Map 		: {alex=1, charles=4, david=2, brian=5, elle=3}
Sorted Map   		: {alex=1, david=2, elle=3, charles=4, brian=5}
Reverse Sorted Map  : {brian=5, charles=4, elle=3, david=2, alex=1}

在评论部分把你的问题告诉我。

快乐学习!!

标签2: Java Sorting
地址:https://www.cundage.com/article/java-sort-map-by-values.html

相关阅读

通过一些示例了解如何使用 Collections.sort() 方法对对象列表进行排序。 默认情况下,sort() 方法将给定列表按升序(或自然顺序)排序。我们可以使用 Collections....
按字母顺序对 String 的字符进行排序 的 Java 示例 – 使用 Stream.sorted() 和 Arrays.sort() 方法。 1) 使用 Stream API 对字符串进行排...
在 Comparable 和 Comparator 接口、数组.sort() 和 Stream.sorted() API。 我们将学习按自然顺序、逆序和任何其他自定义顺序对数组进行排序。 1. ...
Spring Boot Data JPA 排序教程展示了如何在 Spring Data JPA 中对查询结果进行排序。查询结果使用 ORDER BY 子句或 Sort 对象进行排序。 春天 是一...
使用 Java 8 Stream API 以升序和降序(反向)顺序按值对 Map 进行排序 的简单快速使用示例。 逻辑的中心是方法 Map.Entry.comparingByValue(),它按...
学习按字段值对对象列表进行排序。请注意,如果您一次有数百万条记录需要排序,那么数据库查询是最好的方法。否则,使用 Comparable 或 Comparator 接口是一种非常方便的方法。 1....
插入排序 是一种简单而缓慢的排序算法,它反复从未排序的部分中取出下一个元素,并将其插入到已排序部分的正确位置。 插入排序的思想来源于我们的日常生活经验。例如,当你和朋友一起玩牌时,你会把你挑选的...
在本文中,我们使用 Java 流。 Java流定义 溪流 是来自支持顺序和并行聚合操作的源的元素序列。常见的聚合操作有:filter、map、reduce、find、match、sort。源可以...
冒泡排序是一种简单而缓慢的排序算法,它重复遍历集合,比较每对相邻元素,如果顺序错误则交换它们。在排序算法中,如果我们观察阶数较高(即值较大)的元素的移动,它们就像水中的气泡,从底部慢慢地漂浮到顶...
在计算机科学中,合并排序(通常也拼写为 mergesort)是一种基于O(n log n) 比较的排序算法。大多数实现会生成一个稳定排序,这意味着该实现保留了排序输出中相等元素的输入顺序。 归并...