2017-11-07 15 views
0

정수 및 목록 문자열 []의 멀티 맵이 있습니다. 여기서 키에 기반한 멀티 맵의 가장 높은 10 개의 값을 가져와야합니다.Java의 멀티 맵에서 가장 높은 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] 

가 지금은 키에 따라 최고 10 개 값을 얻을 필요가 그것을 구현하기 위해 노력하고 있습니다. > ([0,1], [1,1], [0,0])

다음 얻을 - 첫번째 가장 중요한 6이므로

, 그것은 (6)의 모든 값을 얻어야 -> ([0,0], [1,0], [0,1])의 다음 최상위 키 3의 나머지 값

다음으로 -> ([1,1], [0,0])

다음으로 -> ([1,0], [1,1]) 인 다음 최상위 키 1의 나머지 값을 가져옵니다.

값이 10 개만 필요하므로 키 값 3에서 3 값 + 값 3에서 값 3 값 + 키 2 값에서 값 2 값 + 값 2 값이므로 키 1에서 값 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

이 키를 정렬하는 방법을 통해 UR 문제가 도움이되기를 바랍니다? 또는 처음 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