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'을 반환해야한다, 또는 당신은 입술을 _use_ 할 수 없습니다 궁극적 인'지도'. 값 비교자를'TreeMap'으로 워핑하는 것은 나쁜 아이디어입니다. 정렬 된 엔트리 콜렉션을 유지하거나 엔트리를 정렬하고 그 순서대로 삽입 한 후'LinkedHashMap'을 사용하십시오. –
@ 루이스, 당신은 매우 귀중한 제안을하는 것처럼 보입니다. 그러나 "어떻게"부분에 관해서는, 나는 완전히 어둠 속에 있습니다. 모든 예제가 인정 될 것입니다. – fledglingCoder
http://stackoverflow.com/a/12184443/869736 –