2017-11-07 15 views
0

私は整数のマルチマップと文字列のリスト[]を持っています。ここでは、キーに基づいてマルチマップの最高10の値を取得する必要があります。Javaのマルチマップから最大10個のキー値を選択

私はキーと値は、今私は、キーに基づいて、最高10の値を取得する必要があります

Key Value 
    3  [0,0],[1,0],[0,1] 
    6  [0,1],[1,1],[0,0] 
    1  [1,0],[1,1],[0,1],[0,0] 
    2  [1,1],[0,0] 

、以下のようにしている場合は、同様の方法でそれを実装しようとしています。

最初最高キーが6であるので、それは6のすべての値を取得しなければならない - >([0,1]、[1,1]、[0,0])

次に得ます - >([0,0]、[1,0]、[0,1])の次の最も高いキー3の残りの値

次に、 ([1,1]、[0,0])

次に、 - >([1,0]、[1,1])の次の最高のキー1の残りの値を取得します。

私は10の値しか必要としないので、(キー3からの3つの値+ [キー3からの]値+キー2からの2つの値+2の値キー1から)合計10の値です。

Map<Integer, List<String[]>> outdoorElements = new HashMap<Integer, List<String[]>>(); 
putObjects(outdoorElements,EvaluationCount,schedules); 

private static void putObjects (Map<Integer, List<String[]>> outdoorElements, Integer key, String[] value) { 
    List<String[]> myClassList = outdoorElements.get(key); 
    if(myClassList == null) { 
     myClassList = new ArrayList<String[]>(); 
     outdoorElements.put(key, myClassList); 
    } 
    myClassList.add(value); 
} 

私は一生懸命値を取得する方法をしようとしています:

は、ここに私のコードです。もし誰かが私をこのように導くことができたら本当に感謝します。

+0

キーをソートする方法をウル問題であるのに役立ちます願っていますか?または最初の10個の値を取得する方法は? TreeMapを使用できますか?値の数を維持しますか? – ajc

+0

私は新人です。だから私は並べ替える方法に立ち往生しても値を取得@ ajc –

+0

あなたがTreeMapを使用した場合、キーがソートされます。 descendingMapを呼び出してdescモードでソートし、その値を反復処理するだけでよいでしょう。 –

答えて

1

ツリーマップを作成し、コンパレータを逆順に設定します。 空のリストを作成する ツリーマップの各値をループし、そのリスト(作成する空のリスト)のサイズが10以下であるかどうかを確認するチェックを追加します。

 Map<Integer, List<String>> map = new TreeMap<>(Comparator.reverseOrder()); 
    map.put(1, Arrays.asList("1", "2", "3")); 
    map.put(10, Arrays.asList("4", "5", "6", "7")); 
    map.put(5, Arrays.asList("8", "9")); 
    map.put(110, Arrays.asList("10", "11", "12", "13", "14", "15", "16")); 
    int max = 10; 
    List<String> tenHighestValue = new ArrayList<>(); 
    map.values().forEach(list -> { 
     if (tenHighestValue.size() < max) { 
      list.forEach(str -> { 
       if (tenHighestValue.size() < max) { 
        tenHighestValue.add(str); 
       } 
      }); 
     } 
    }); 
    System.out.println(tenHighestValue); 

私はそれが

+0

助けてくれてありがとう。しかし、ラムダ式は私のバージョンではサポートされていないと言います。ラムダ式を使わずに他の方法がありますか? –

+0

はい、通常のforループを使用して、マップの値をループすることができます。 – tmj010

関連する問題