2016-10-14 8 views
0

Javaアプリケーションにはマップを注文する必要があります。特定のフィールドに関連しています。Javaでフィールド値(Comparatorを使用)に従ってこのマップを並べ替えるにはどうすればよいですか?

は、だから私は、次のような状況を持って、私のプログラムの中に、私はこのHashMapのオブジェクトがあります。それから移入され

Map<Integer, QuotaTir> mappaQuote = new HashMap<Integer, QuotaTir>(); 

(DBからデータを取得し、これは重要ではありません)。

これはQuotaTirオブジェクトのコードです:あなたは以前のクラスがは(QuotaTir quota1、QuotaTir quota2)オブジェクトがを持っている場合と言う方法を比較実装して見ることができるように

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 
    } 
} 

datariferimentoprezzoフィールド< =他のオブジェクトの同じフィールドに(この文字列情報をPropperの日付に変換する必要があります。フィールドのタイプを変更できません)。

[OK]を私の前mappaQuote HashMapのは、このようなものが含まれて:だから私は、前QuotaTirdatariferimentoprezzoフィールドの値を使用して(前のコンパレータを使用してこれらのエントリを注文したい

{ 
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], 

} 

をクラス)。

私はHashMapのを使用することはできませんと思いますが、私は** LinkedMapまたは*ツリーマップに変換する必要があります。

どうすればいいですか?私はdatariferimentoprezzoフィールドに従って正しく注文できますか?

+0

例を確認https://www.mkyong.com/java/how-to-sort-a-map-in-javaで "バリュー2.ソート" /。 – saurav

答えて

0

Java8の場合は試してください。

TreeMap<QuotaTir, Integer> result = mappaQuote.entrySet().stream() 
    .collect(() -> new TreeMap<>(mappaQuote.values().iterator().next()), 
     (m, e) -> m.put(e.getValue(), e.getKey()), (m, n) -> m.putAll(n)); 

それとも

TreeMap<QuotaTir, Integer> result = new TreeMap<>(
    mappaQuote.values().iterator().next()); 
for (Entry<Integer, QuotaTir> e : mappaQuote.entrySet()) 
    result.put(e.getValue(), e.getKey()); 
+0

はJava 6にはいいですか? – AndreaNobili

+0

@AndreaNobili – saka1029

+0

okこれは私にとっては良くない:-( – AndreaNobili

関連する問題