1

やあ、

たとえば、非論理的な文字列のリストがあります。

Scanner s = new Scanner(
                "m29 523\n" +
                "b34 827\n" +
                "p42 235\n" +
                "b34 294\n" +
                "t78 421\n" +
                "t78 673\n" +
                "c93 173\n" +
                "k46 925\n" +
                "k46 322\n" +
                "x21 644\n");

次に、文字列をスペースの前後の 2 つの部分に分割し、重複を排除し、重複 (b34、t78、k46) の中で最大値 (スペースの後) のみを残します。私はそのような出力を意味します:

                "m29 523"
                "b34 827"
                "p42 235"
                "t78 673"
                "c93 173"
                "k46 925"
                "x21 644"

2つの部分に分けて重複を排除するために、私はそのようなコードを使用しましたが、私にとっては問題ありません:

Map<String, ArrayList<String>> list = new HashMap<String, ArrayList<String>>();
        while (s.hasNext()){
            String key = s.next();
            if(!list.containsKey(key));
                list.put(key, new ArrayList<String>());
            list.get(key).add(s.next());
        }
        System.out.println(list);

しかし、ここで文字列の 2 番目の部分の比較を実装して最大値を取得する方法がわかりませんか? Integer.parseInt(list.get(キー))?

4

2 に答える 2

2

単純な比較はどうでしょうか。キーが存在する場合は、キーを使用して値を取得します。Math.MAX を使用して値を新しい値と比較し、キーを使用して再挿入します。値は最大値で上書きされます。

Map<String, Integer> list = new HashMap<String, Integer>();

String key="FOO";
String s[]={"123","012","789"};
for(String numStr: s)
{
    int value = Integer.parseInt(numStr); 
    if(!list.containsKey(key))
        list.put(key, value);
    else 
        list.put(key, Math.max(value, list.get(key)));
}
System.out.println( list.get(key) );

結果は789

于 2013-09-10T19:52:30.087 に答える
1

ArrayList を複雑にする必要はないと思います。
ハッシュマップを使用するだけです。
シンプルを実現するコードは次のとおりです。

Map<String, Integer> map = new HashMap<String, Integer>();
        while(s.hasNext()) {
            String key = s.next();
            int value = Integer.parseInt(s.next());
            if(map.containsKey(key)) {
                if(value>map.get(key))
                    map.put(key, value);
            }else map.put(key, value);
        }
        System.out.println("Map="+map);
    }
于 2013-09-10T20:05:59.070 に答える