java中list里面存放map,根据map中的某两个个字段进行排序

如题所述

package com.compare.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Main mainTest=new Main();
        mainTest.sortMap();
    }
    
    public  void sortMap(){
        List<Map<Integer, Double>> maps=new ArrayList<Map<Integer, Double>>();
        for(int i=0;i<10;i++){
            HashMap<Integer, Double> map=new HashMap<Integer, Double>();
            for(int j=0;j<2;j++){
                map.put(j, Math.random());
            }
            maps.add(map);
        }
        
        for(Map<Integer, Double>  map:maps){
            System.out.println(getValue(map));
        }
        System.out.println("************************");
        Map<Integer, Double> currentMap;
        for(int i=0;i<maps.size()-1;i++){
            for(int j=0;j<maps.size()-i-1;j++){
                if(getValue(maps.get(j))>getValue(maps.get(j+1))){
                    currentMap=maps.get(j+1);
                    maps.set(j+1, maps.get(j));
                    maps.set(j,currentMap);
                }
            }
        }
        
        for(Map<Integer, Double>  map:maps){
            System.out.println(getValue(map));
        }
        
        
        
    }
    
    public Double getValue(Map<Integer, Double> currentMap){
        return currentMap.get(0)+currentMap.get(1);
    }
    
    
    
    
}

我采用最简单的排序大数沉底。而且getValue
方法你可以自己实现,决定使用哪几个进行排序。(我们有进行key值不存在的判断)

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-11
list是存放单独的元素的,而map集合存放的是键值和对应的映射关系 你是不能单纯的把map存入list中的,你是想把map的键存入list吗?还是存放值,异或着是存放他的映射关系?
第2个回答  推荐于2017-11-26
用Collections.sort(List list, Comparator c)

实现一个Comparator即可
public class MyComparator implements Comparator {

public int compare(Object o1, Object o2) {
Map m1=(Map)o1, m2=(Map)o2;
//从m1与m2取字段值然后比较,大于返回1,等于返回0,小于返回-1
}
public boolean equals(Object o) {
//同上面类似
}追问

恩 这是JAVA的 实现 vb.net 也可以这样吗

追答

实现System.Collections.IComparer

Public Class MyComparer
Implements System.Collections.IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) _
As Integer Implements IComparer.Compare
list.sort(new MyComparer)

本回答被提问者和网友采纳
第3个回答  2013-10-11
最简单的就用两个for循环,
用打擂算法排序(或者选择排序都可以)追问

具体来说呢

第4个回答  2013-10-11
实现Comparator接口就好了,想怎么排就怎么排。追问

vb.net 也可以这样吗

相似回答