Mapは出現頻度を統計し、頻度の大きさによって逆順に出力する

1921 ワード

タイトルの説明:
テストチームでは、A、B、Cなどの複数のアプリケーションをカバー率統計します.N,ここでは,コードオーバーライド率が<=20,21~50,51~70および>70の区間における適用個数を統計し,これらの区間を適用個数が大きい順に並べ替えることを望んでいる.
入力:
A:45,C:35,D:9,F:43,M:10,G:90
出力:
21~50:3,<=20:2,>70:1,51~70:0
筆記試験の時間は限られていて、できていないで、主にmapの中のvalueに対してどのように並べ替えます
その後、APIを調べたところ、Mapにはキー値ペアをEntryクラスにカプセル化する方法があり、EntryクラスをListに入れてカスタムコンパレータに入力してソートすればよいことが分かった.
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        Map map = new HashMap<>();
        map.put("<=20",0);
        map.put("21~50",0);
        map.put("51~70",0);
        map.put(">70",0);
        String[] str = s.split(",");
        for(String temp : str){
            String[] t = temp.split(":");
            int v = Integer.parseInt(t[1]);
            if(v <= 20){
                    map.put("<=20",map.get("<=20")+1);
            }
           else if(v <= 50){
                    map.put("21~50",map.get("21~50")+1);
           }
           else if(v <= 70){
                    map.put("51~70",map.get("51~70")+1);
           }
           else{
                    map.put(">70",map.get(">70")+1);
           }
        }
        List> list = new ArrayList<>(map.entrySet());
        Collections.sort(list, (a,b)->(b.getValue()-a.getValue()));
        Iterator> it=list.iterator();
        String res = "";
        while(it.hasNext()){  
            Map.Entry en = it.next();
            res += en.getKey()+":"+en.getValue()+",";
        }  
         System.out.print(res.substring(0,res.length()-1));  
    }
}