java:map:分别通过key和value进行排序

1.只适用于value格式为字符串 

package testMap;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class TestMap {

	public static void main(String[] args) {
		//1
//		System.out.println(
//			new HashMap<String, Object>(){
//			{put("name", "香港");put("value", "");}
//			
//		} );
		
		
		//2
		Map<String, String> map = new TreeMap<String, String>();

        map.put("KFC", "kfc");
        map.put("WNBA", "wnba");
        map.put("NBA", "nba");
        map.put("CBA", "cba");

        map.put("0", "2.24");
        map.put("1", "10.4");//不能排序10.4 和 1.4
        map.put("2", "1.4");
        map.put("3", "3.6");
        map.put("4", "0.3");
        Map<String, String> resultMap = sortMapByKey(map);    //按Key进行排序
//        Map<String, String> resultMap = sortMapByValue(map); //按Value进行排序

        for (Map.Entry<String, String> entry : resultMap.entrySet()) {
            System.out.println(entry.getKey() + " " + entry.getValue());
        }
		

	}

	
	/**
     * 使用 Map按key进行排序
     * @param map
     * @return
     */
    public static Map<String, String> sortMapByKey(Map<String, String> map) {
        if (map == null || map.isEmpty()) {
            return null;
        }

        Map<String, String> sortMap = new TreeMap<String, String>(
                new MapKeyComparator());

        sortMap.putAll(map);

        return sortMap;
    }
	
	 /**
     * 使用 Map按value进行排序
     * @param oriMap
     * @return
     */
    public static Map<String, String> sortMapByValue(Map<String, String> oriMap) {
        if (oriMap == null || oriMap.isEmpty()) {
            return null;
        }
        Map<String, String> sortedMap = new LinkedHashMap<String, String>();
        List<Map.Entry<String, String>> entryList = new ArrayList<Map.Entry<String, String>>(
                oriMap.entrySet());
        Collections.sort(entryList, new MapValueComparator());

        Iterator<Map.Entry<String, String>> iter = entryList.iterator();
        Map.Entry<String, String> tmpEntry = null;
        while (iter.hasNext()) {
            tmpEntry = iter.next();
            sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());
        }
        return sortedMap;
    }
	
}

key排序:

 

value排序:

 

 

key比较器类:

class MapKeyComparator implements Comparator<String>{

    @Override
    public int compare(String str1, String str2) {
        
        return str1.compareTo(str2);
    }
}

value比较器类“” 

class MapValueComparator implements Comparator<Map.Entry<String, String>> {

    @Override
    public int compare(Entry<String, String> me1, Entry<String, String> me2) {

        return me1.getValue().compareTo(me2.getValue());
    }
}

2.适用于value格式为Double格式(同Integer)

package testMap;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;

public class TestSortMapForDouble {

	public static void main(String[] args) {
		
		 // 默认情况,TreeMap按key升序排序
	    Map<String, Double> map = new TreeMap<String, Double>();
	    map.put("bac1", 0.1);
	    map.put("acb1", 0.4);
	    map.put("acb100", 0.01);
	    map.put("acb10", 0.3);
	    map.put("bca1", 30.3);
	    map.put("cab1", 80.2);
	    map.put("cba1", 1.3);
	    map.put("abc1", 10.3);
	    map.put("abc2", 12.6699999);
	    Map<String, Double> resultMap =valueUpSort(map) ;

	    for (Map.Entry<String, Double> entry : resultMap.entrySet()) {
            System.out.println(entry.getKey() + "-->" + entry.getValue());
        }
	}

	
	
	public static Map<String, Double> valueUpSort(Map<String, Double> map) {
		List<Map.Entry<String, Double>> wordMap = new ArrayList<Map.Entry<String, Double>>(map.entrySet());
//		System.out.println(wordMap);
		Collections.sort(wordMap, new Comparator<Map.Entry<String, Double>>() {// 根据value排序
		public int compare(Map.Entry<String, Double> o1, Map.Entry<String, Double> o2) {
		double result = o1.getValue() - o2.getValue();//升序降序交换位置即可
		if (result > 0)
		return 1;
		else if (result == 0)
		return 0;
		else
		return -1;
		}
		});
	    System.out.println("------------map按照value升序排序--------------------");
	    Map<String, Double> ma = new LinkedHashMap<String, Double>();
	    for (Map.Entry<String, Double> entry : wordMap) {
//	        System.out.println(entry.getKey() + "->" + entry.getValue());
	        ma.put(entry.getKey(),entry.getValue());
	    }
	    
	    return ma;
	}
}

 参考:https://blog.csdn.net/qinchao2011/article/details/69764708
https://blog.csdn.net/yangyutong0506/article/details/78190245

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Map 中可以使用 TreeMap 来实现对 key 或者 value排序:1. 根据 key 排序:使用 TreeMap 时,可以在构造方法中传入 Comparator 对象,指定排序规则;2. 根据 value 排序:可以将 map 中的元素放到 List 中,然后使用 Collections.sort 方法,传入自定义的 Comparator 对象,指定排序规则。 ### 回答2: 在Java中,可以使用`TreeMap`来实现根据key排序Map。`TreeMap`是基于红黑树实现的,可以自动按照key的自然顺序或者通过传入的`Comparator`进行排序。下面是一个根据key排序的示例代码: ```java import java.util.*; public class KeySortingExample { public static void main(String[] args) { // 创建一个TreeMap对象 Map<Integer, String> map = new TreeMap<>(); // 添加元素到Mapmap.put(3, "Apple"); map.put(1, "Banana"); map.put(2, "Orange"); // 根据key排序输出 for (Map.Entry<Integer, String> entry : map.entrySet()) { System.out.println(entry.getKey() + " : " + entry.getValue()); } } } ``` 输出结果为: ``` 1 : Banana 2 : Orange 3 : Apple ``` 如果想要根据value排序,则可以使用`Stream`和`Comparator`来实现。下面是一个根据value排序的示例代码: ```java import java.util.*; public class ValueSortingExample { public static void main(String[] args) { // 创建一个HashMap对象 Map<Integer, String> map = new HashMap<>(); // 添加元素到Mapmap.put(3, "Apple"); map.put(1, "Banana"); map.put(2, "Orange"); // 使用Stream对Map进行排序 List<Map.Entry<Integer, String>> sortedList = new ArrayList<>(map.entrySet()); sortedList.sort(Map.Entry.comparingByValue()); // 根据value排序输出 for (Map.Entry<Integer, String> entry : sortedList) { System.out.println(entry.getKey() + " : " + entry.getValue()); } } } ``` 输出结果为: ``` 3 : Apple 1 : Banana 2 : Orange ``` 以上就是Java中根据keyvalue排序的方法。 ### 回答3: 在Java中,可以使用TreeMap来根据key进行排序,而HashMap则不能。以下是两种不同的排序方法: 1. 根据key进行排序: 可以使用TreeMap来根据key进行排序。TreeMap会按照key的自然顺序对其进行排序,或者通过传入自定义的Comparator进行排序。示例如下: ```java import java.util.*; public class MapSortByKeyExample { public static void main(String[] args) { // 创建一个TreeMap对象,默认按照key的自然顺序排序 TreeMap<Integer, String> map = new TreeMap<>(); // 添加元素 map.put(4, "apple"); map.put(1, "orange"); map.put(3, "banana"); map.put(2, "grape"); // 遍历输出结果 for (Map.Entry<Integer, String> entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } } } ``` 输出结果: ``` 1: orange 2: grape 3: banana 4: apple ``` 2. 根据value进行排序: 如果需要根据value进行排序,可以通过将Map的entrySet转换为List,然后利用Collections.sort方法进行排序。示例如下: ```java import java.util.*; public class MapSortByValueExample { public static void main(String[] args) { // 创建一个HashMap对象 HashMap<Integer, String> map = new HashMap<>(); // 添加元素 map.put(4, "apple"); map.put(1, "orange"); map.put(3, "banana"); map.put(2, "grape"); // 将entrySet转换为List List<Map.Entry<Integer, String>> entryList = new ArrayList<>(map.entrySet()); // 根据value排序 Collections.sort(entryList, (e1, e2) -> e1.getValue().compareTo(e2.getValue())); // 遍历输出结果 for (Map.Entry<Integer, String> entry : entryList) { System.out.println(entry.getKey() + ": " + entry.getValue()); } } } ``` 输出结果: ``` 4: apple 3: banana 2: grape 1: orange ``` 这两种方法可以满足不同的排序需求,无论是根据key还是value进行排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值