アプリ版:「スタンプのみでお礼する」機能のリリースについて

次の配列のc.intValue()が回数表示されるのですが、
あまりにデータが多いため、見やすくするために数が大きい順に表示したいと思います。
for文でlengthを求め・・・って言うのは分かるのですが、
c.intValue()で表示にしているので、どう書けばいいか分かりません。
以下ソースです。
・・・・・
HashMap<String,Integer> hsFlow = new HashMap<String,Integer>();
<中略>
Iterator<String> ir = hsFlow.keySet().iterator();
while(ir.hasNext()){
String f = ir.next();
Integer c = hsFlow.get(f);
if(c==null) c = new Integer(0);
System.out.println("経路"+f+":"+c.intValue()+"回");

具体的なソースコードを教えていただけると嬉しいです。
ご回答よろしくお願いします。

A 回答 (2件)

http://ideone.com/q8Xsd

1.18行目まではデータをHashMap<String,Integer>に次々突っ込んでいるだけ。

2.今回はソートだから影響ないけど、元々のmapを弄りたくないけど、データを色々変更して遊びたいときのために、HashMap<String,Integer>のコンストラクタに渡して複製した。

http://ideone.com/vO6J6

http://ideone.com/0flik
の違いを見るとわかるかも。
HashMapに格納されたキーの順番で格納順じゃないんだね

3.19行目と20行目は、Collection.sortに渡せるArrayList<E>に移し変えるため、entrySet()はCollection<E>なので渡せる。

4.Collection.sort(list,Collection.reverseOrder(new SampleSort()))でソート。一応SampleSortは小さい順で並び替えるように作った。ソッチの方が慣れているから。別にcompareToの中の戻り値を-1倍すれば、別にreverseOrderをする必要はない。

5. 24行目から27行目は大きな順に並びかえられているリストを出力しているだけ。

#質問者の事例と完全一致じゃないけど、その辺は自分で脳内補完できるよなあ?と思うのでこっちのやりやすい事例で行った。
====================
>経路と回数をパックにするクラスを定義する。
でもいいんだけど、質問の段階で19行目の段階にいて、
おそらく、ideone.comでは
org.apache.commons.collections.CollectionUtils
は使えないし、使えたとしても、質問者からjarファイルどうやって使うの云々言われると面倒。となるとループを書くハメになるからイヤだなと。だからもとのMap.Entry<String,Integer>を再利用した。
    • good
    • 0
この回答へのお礼

とても分かりやすく、無事大きい順でソートすることが出来ました。
ご回答ありがとうございました。

お礼日時:2010/12/10 23:47

1.経路と回数をパックにするクラスを定義する。



2.whileループの中で、1で定義したクラスの配列に(あるいはArrayListに)格納。

3.Array.sortでソート。


*ソート順は回数、経路となると思います。そのようにソートできるようにComparatorを実装してください。

この回答への補足

ご回答ありがとうございます。

申し訳ないのですが、詳しいソース等ご教授願いませんでしょうか?

ど素人なもので、
//経路と回数をパックにするクラスを定義する。
もどうすればいいか分からず、ましてComparatorも使用したことがなく、調べても使い方が分かりませんでした。

補足日時:2010/12/04 23:54
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!