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

 我来答
韩家_四少
2013-10-12 · 超过24用户采纳过TA的回答
知道答主
回答量:69
采纳率:0%
帮助的人:58万
展开全部
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值不存在的判断)

LS8266
2013-10-11 · TA获得超过398个赞
知道小有建树答主
回答量:265
采纳率:0%
帮助的人:145万
展开全部
list是存放单独的元素的,而map集合存放的是键值和对应的映射关系 你是不能单纯的把map存入list中的,你是想把map的键存入list吗?还是存放值,异或着是存放他的映射关系?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小狂中E
推荐于2017-11-26 · TA获得超过1418个赞
知道大有可为答主
回答量:1514
采纳率:66%
帮助的人:1009万
展开全部
用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)
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友81ae37efe0
2013-10-11 · TA获得超过159个赞
知道小有建树答主
回答量:239
采纳率:50%
帮助的人:123万
展开全部
最简单的就用两个for循环,
用打擂算法排序(或者选择排序都可以)
追问
具体来说呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-10-11
展开全部
实现Comparator接口就好了,想怎么排就怎么排。
追问
vb.net 也可以这样吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式