2013-07-08 4 views
0

은 내가 먼저 하나의 HashMap과 같은 작업 시작 :여러 HashMaps를 정렬하기 위해 일반적인 ValueComparator를 만드는 방법은 무엇입니까?

private static Map<Broker, Integer> brokerSalesCountList = new HashMap<Broker, Integer>(); 

그리고 여기 제 값 비교기 코드의

private static ValueComparator4Broker bvc = new ValueComparator4Broker(brokerSalesCountList); 
private static TreeMap<Broker,Integer> sortedbrokerSalesCountList = new TreeMap<Broker,Integer>(bvc); 

sortedbrokerSalesCountList.putAll(brokerSalesCountList); 

을 사용 :

public class ValueComparator4Broker implements Comparator<Broker> { 

    Map<Broker, Integer> base; 
    public ValueComparator4Broker(Map<Broker, Integer> base) { 
     this.base = base; 
    } 

    @Override 
    public int compare(Broker a, Broker b) { 
     if (base.get(a) >= base.get(b)) { 
      return -1; 
     } else { 
      return 1; 
     } 
    } 
} 

문제 :는 지금은 더이 같은 방식으로 2 개의 새로운 해시 맵을 정렬해야하며 코드를 에 복사하는 대신 ValueC omparator4Broker 클래스는, 나는 모든 새 *의 HashMap *들에 의해 사용될 수있는 하나의 일반 및 매개 변수 ValueComparator 클래스를 만들고 싶어 :

private static Map<Area, Integer> areaBrokerCountList = new HashMap<Area, Integer>(); 
private static Map<Area, Integer> areaSalesTotalList = new HashMap<Area, Integer>(); 

나는 다음과 같은 시도를하지만, 코드는 잘못된 것입니다 및 수행 내 HashMap의 핵심 객체를 으로 대체 할 수 없습니다. 접근 및 코드 예제를 수정하기 위해 어떤 도움을 주시면 감사하겠습니다 :

import java.lang.reflect.Type; 
import java.util.Comparator; 
import java.util.Map; 

public class ValueComparator implements Comparator<Type> { 
    Map<Type, Integer> base; 
    public ValueComparator(Map<Type, Integer> base) { 
     this.base = base; 
    } 

    @Override 
    public int compare(Type a, Type b) { 
     if (base.get(a) >= base.get(b)) { 
      return -1; 
     } else { 
      return 1; 
     } // returning 0 would merge keys 
    } 

} 
+0

귀하의 비교기는'0'을 반환해야한다, 또는 당신은 입술을 _use_ 할 수 없습니다 궁극적 인'지도'. 값 비교자를'TreeMap'으로 워핑하는 것은 나쁜 아이디어입니다. 정렬 된 엔트리 콜렉션을 유지하거나 엔트리를 정렬하고 그 순서대로 삽입 한 후'LinkedHashMap'을 사용하십시오. –

+0

@ 루이스, 당신은 매우 귀중한 제안을하는 것처럼 보입니다. 그러나 "어떻게"부분에 관해서는, 나는 완전히 어둠 속에 있습니다. 모든 예제가 인정 될 것입니다. – fledglingCoder

+0

http://stackoverflow.com/a/12184443/869736 –

답변

1

나는 차가운 입력 일반 코드에서 너무 잘 모르겠지만 여기에 아이디어 :

:

클래스이 방법을 사용하여

Map<Broker, Integer> brokerSalesCountList = new HashMap<Broker, Integer>(); 

private static ValueComparator<Broker> bvc = new ValueComparator<Broker>(brokerSalesCountList); 

여기에 클래스를 정의 :

public class ValueComparator<T> implements Comparator<T> { 
    Map<T, Integer> base; 
    public ValueComparator(Map<T, Integer> base) { 
     this.base = base; 
    } 

    @Override 
    public int compare(T a, T b) { 
     if (base.get(a) >= base.get(b)) { 
      return -1; 
     } else { 
      return 1; 
     } // returning 0 would merge keys 
    } 

}