2016-12-24 5 views
1

コードを使用してマップ内のデータをソートします。ListArrayからデータ(キー、値)を取得する方法

Map<Integer, Integer> map = new HashMap<>(); 
    List list = new ArrayList(map.entrySet()); 
    Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() { 
     @Override 
     public int compare(Map.Entry<Integer, Integer> a, Map.Entry<Integer, Integer> b) { 
      return a.getValue() - b.getValue(); 
     } 
    }); 

マップからリストにデータをコピーして並べ替えるだけです。 リストからデータを取得するにはどうすればよいですか?リストのメソッドget()は単にオブジェクトではなく、私の2つの整数を返します

+1

生の種類は使用しないでください。あなたのリストはList >型でなければなりません。リストをソートしてその値にアクセスしているので、すでにMap.Entryが何であるかを知っているようです。だから問題は何ですか? Map.Entryのjavadocを読んだことがありますか? –

答えて

1

あなたlist実際には各Entryを取得できるように、以下に示すように、タイプMap.Entry<Integer, Integer>の要素が含まれています:あなたはそれを行う

Map<Integer, Integer> map = new HashMap<>(); 
//add the values to map here 

//Always prefer to use generic types shown below (instead of raw List) 
List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet()); 

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

    //loop over the list to retrieve the list elements 
    for(Map.Entry<Integer, Integer> entry : list) { 
     System.out.println(entry.getValue()); 
    } 
+0

My Eclipseは、要素型のMap.Entry に変換できません。 –

+0

@MikhailNonoこれはList >ではなくListとしてリストを宣言したからです。あなたがそれらを無視するのではなく、すべての答えとコメントを読んでください。あなたがそれらを無視していなくても問題が残っていたら、質問を編集し、新しいコードを投稿し、コンパイラから得た正確で完全なエラーメッセージを投稿してください。 –

+0

@JBNizet、ありがとう。今すぐコードが正しく動作します。未解決のコンパイルの問題:スレッド「メイン」でjava.lang.Errorに –

1

List list = new ArrayList(map.entrySet()); 

あなたはあなたのリストにジェネリックを使用して、あなたがそれをソートした後、リストのEntryに繰り返すことができます:

List<Entry<Integer, Integer>> list = new ArrayList(map.entrySet()); 
... 
// your sort the list 
.. 
// you iterate on key-value 
for (Entry<Integer, Integer> entry : list){ 
    Integer key = entry.getKey(); 
    Integer value = entry.getValue(); 
} 
+0

例外 \t方法値は()タイプリスト \t構文エラーのために定義されていません、挿入「)」packS.SecondProjectでEnhancedForStatementHeader \tが完成します。 SecondProject.main(SecondProject.java:85) –

+0

ページをリフレッシュすると思います。そして、ジェネリック型で 'List'を宣言するのを忘れないでください。インポートの場合は、 'java.util'で指定します。 – davidxxx

+0

ありがとうございます。今、私のコードは何のエラーもなく動作します。 –

関連する問題