자바 응용 프로그램으로 주문하려면 특정 필드와 관련된지도를 주문해야합니다.Java에서 필드 값 (Comparator 사용)에 따라이 Map을 어떻게 정렬 할 수 있습니까?
그래서 나는 다음과 같은 상황이, 내 프로그램에 내가이 의 HashMap 목적이 있습니다 다음 채워집니다
Map<Integer, QuotaTir> mappaQuote = new HashMap<Integer, QuotaTir>();
합니다 (DB에서 데이터를 획득를, 이것은 중요하지 않다). 객체가 이있는 경우
public class QuotaTir implements Cloneable, Comparator<QuotaTir>, Comparable<QuotaTir> {
private String numeroPolizza; // Identificatio univoco polizza
private String tipo; // Operazion effettuata (Es: 99 ---> Sottoscrizione polizza)
private String datariferimentoprezzo;
private String codiceFondo;
private BigDecimal controvalore; // Usato per calcolare l'andamento della polizza in un intervallo di tempo
private BigDecimal quote;
private int contarighe;
// CONSTRUCTORS, GETTERS AND SETTERS METHODS
public int compare(QuotaTir quota1, QuotaTir quota2) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date quota1Date = null;
Date quota2Date = null;
try {
quota1Date = sdf.parse(quota1.getDatariferimentoprezzo());
quota2Date = sdf.parse(quota2.getDatariferimentoprezzo());
if (quota1Date.before(quota2Date)) {
return -1;
} else if (quota1Date.after(quota2Date)) {
return 1;
} else {
return 0;
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 2; // ERROR CASE
}
}
이전 클래스가 비교 구현 당신이 볼 수 있듯이 (QuotaTir의 quota1, QuotaTir의 quota2) 방법 말 :
이
은 QuotaTir 객체의 코드 datariferimentoprezzo 필드 < = 다른 객체의 동일한 필드에 (이 문자열 정보를 프로퍼티 날짜로 변환해야하므로 필드 유형을 변경할 수 없습니다.){
0=QuotaTir [numeroPolizza=12345, tipo=AttualeCVT, datariferimentoprezzo=2016-10-13, codiceFondo=null, controvalore=4887172.119733, quote=595128.54995, contarighe=0],
1=QuotaTir [numeroPolizza=12345, tipo=InizialeCVT, datariferimentoprezzo=2015-12-31, codiceFondo=null, controvalore=-100058.840000, quote=100058.84000, contarighe=1],
2=QuotaTir [numeroPolizza=12345, tipo=99, datariferimentoprezzo=2016-01-28, codiceFondo=null, controvalore=-80000.000000, quote=5515.20890, contarighe=2],
4=QuotaTir [numeroPolizza=12345, tipo=99, datariferimentoprezzo=2016-04-08, codiceFondo=null, controvalore=-20000.000000, quote=2094.46015, contarighe=4]
3=QuotaTir [numeroPolizza=12345, tipo=XPRE, datariferimentoprezzo=2016-01-28, codiceFondo=null, controvalore=-20000.000000, quote=20000.00000, contarighe=3],
}
그래서 내가 이전 QuotaTir의 datariferimentoprezzo 필드의 값을 사용하여 이전 비교기 (사용하여 이러한 항목을 주문합니다 : 내 이전 mappaQuote HashMap의이 같은 것을 포함 있도록
확인 수업). **
나는 내가 의 HashMap를 사용할 수 있다고 생각하지만 난 LinkedMap 또는 *의 트리 맵으로 변환해야합니다.
어떻게하면됩니까? datariferimentoprezzo 필드에 따라 올바르게 주문할 수 있습니까?
확인 예 "값 2. 정렬"에서 https://www.mkyong.com/java/how-to-sort-a-map-in-java /. – saurav