笑尽天下书生 2022-06-16 22:46 采纳率: 0%
浏览 16

HashMap的Value排序问题

问题遇到的现象和发生背景
public class Computer {//创建一个电脑类
    String name;
    int price;
    Computer(String name,int price){
        this.name=name;
        this.price=price;
    };
    void info(){
        System.out.println();
    };

}

public class Hash_Map {
    public static void main(String[] args) {

        HashMap<String,Computer> hashmap=new HashMap<String,Computer>();//Computer类里有一个String name 和int price变量
        Computer c1=new Computer("联想", 8999);
        Computer c2=new Computer("苹果", 9999);
        Computer c3=new Computer("惠普", 3999);
        Computer c4=new Computer("华硕", 4999);
        Computer c5=new Computer("戴尔", 1999);

        hashmap.put("1",c1);
        hashmap.put("2",c2);
        hashmap.put("3",c3);
        hashmap.put("4",c4);
        hashmap.put("5",c5);


        HashMap<String,Integer> hashmap1=new HashMap<String,Integer>();
        hashmap1.put("1", c1.price);
        hashmap1.put("2", c2.price);
        hashmap1.put("3", c3.price);
        hashmap1.put("4", c4.price);
        hashmap1.put("5", c5.price);
     // 创建新的双链集合 只有int price属性
//不想创建这个集合,直接根据HashMap<String,Computer> hashmap=new HashMap<String,Computer>();Computer里的int 排序




        Set<Map.Entry<String, Integer>> entrySet= hashmap1.entrySet();

        List<Map.Entry<String,Integer>> list=new ArrayList<>(hashmap1.entrySet());//怎样将Integer替换成object的对象
//然后用下列方法在<String,Object>其中根据object的int price值排序

       Collections.sort(list, new Comparator<Map.Entry<String, Integer>>()
       {
           @Override                  //改成Comupter↓
           public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
               return o1.getValue()- o2.getValue();


           }
       });//给这个list集合从小到大排序
            for (Map.Entry s : list) 
       {

        System.out.println(s.getKey()+"--"+s.getValue());//打印键值和price值

       }

    System.out.println("最低的电脑售价为:"+list.get(0).getValue());

    }
}

运行结果及报错内容
我的解答思路和尝试过的方法

Collections.sort(list, new Comparator<Map.Entry<String, Integer>>()
{
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o1.getValue()- o2.getValue();

       }
   });

在代码Collects.sort()的代码中 将new Comparator<Map.Entry<String, Integer>>中的Integer改成Object一个电脑对象,请问怎么根据Computer里的value price排序呢?
没有做出来,请各位仁兄解答一下

我想要达到的结果

现在我不想创建一个<String ,Integer>的新集合 在创建HashMap<String,Computer> hashmap=new HashMap<String,Computer>();
的条件下,直接用Set<Map.Entry<String, Object(就是Computer)>> entrySet= hashmap1.entrySet();
List<Map.Entry<String,Object(就是Computer)>> list=new ArrayList<>(hashmap1.entrySet());的代码用Collects.sort()方法排序

然后打印Object computer的price的最小值;

  • 写回答

2条回答 默认 最新

  • 不爱运动的跑者 2022-06-16 23:52
    关注

    为啥不把computer直接放 list里用对象属性排序 非要搞个 hashmap干啥

    评论

报告相同问题?

问题事件

  • 创建了问题 6月16日

悬赏问题

  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!