[Java]Map統計都市数

2214 ワード

Map統計都市数 - を入力し、最も多くの人が行った都市を集計し、行った都市の数でソートします.同じ数であれば、都市名の辞書順にソートして入力します.
34839946-beijing 34839946-shanghai 42342124-hongkong 42342124-guilin 42342124-guilin 12312344-shanghai 12312344-shanghai 22341234-nanjing
出力:
shanghai 2
beijing 1
guilin 1
hongkong 1
nanjing 1

コード:
import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();

        /*    */
        Set set = new HashSet<>();
        String input[] = str.split(" ");
        for (int i = 0; i < input.length; i++) {
            set.add(input[i]);
        }

        /*            allCity     */
        List li = new ArrayList<>(set);
        List allCity = new ArrayList<>();
        for (int i = 0; i < li.size(); i++) {
            String temp[] = li.get(i).split("-");
            allCity.add(temp[1]);
        }

        /*   allCity     ,  result */
        Map result = new TreeMap<>();
        for (String s:allCity) {
            if(result.containsKey(s)){
                Integer rrr = result.get(s)+1;
                result.put(s,result.get(s)+1);
            }else{
                result.put(s,1);
            }
        }

        /*  result     */
        List> tempResult = new ArrayList<>(result.entrySet());
        tempResult.sort(new Comparator>() {
            @Override
            public int compare(Map.Entry o1, Map.Entry o2) {
                if(o1.getValue() != o2.getValue()){
                    return o2.getValue().compareTo(o1.getValue());
                }else{
                    return o1.getKey().compareTo(o2.getKey());
                }
            }
        });

        //System.out.println(tempResult);
        /*   result */
        for (Map.Entry r:tempResult) {
            System.out.println(r.getKey() + " " + r.getValue());
        }
    }
}