2016-07-21 20 views
1

私はjavaに新しく、私はhashMapListのリストの下で宣言しています。リストをソートする方法<HashMap <String、String >> ls in java?

List<HashMap<String, String>> hashMapList = new ArrayList<HashMap<String, String>>(); 

私はhashMapListにデータを置くための別の方法insertDataをしました。

私は別のリストを作成しましたpsData

HashMap<String, String> psData = new HashMap<String, String>(); 

したがって、hashMapListのリストには以下のコードが使用されています。

HashMap<String, String> psData = new HashMap<String, String>(); 

so for insert the list in hashMapList i have use below code. 

psData = insertData(payment.getDocumentNo(), payment.getId(), 
        payment.getPaymentDate(), creditLeft, payment.getBusinessPartner(), group, 
        recOrPay.equals("RECEIVABLES") ? paymentInTab : paymentOutTab, dateFormat, true, 
        BigDecimal.ZERO, addressline1, addressline2, City, postalcode, state, email, 
        phoneno, payment.getAmount(), duration, discount, 
        payment.getFinancialTransactionAmount(), payment.getWriteoffAmount(), 
        Outstandings, Coa, Ev); 
       hashMapList.add(psData); 

ここで、私は、insertDataメソッドで渡したcoaプロパティを使用して、そのhashMapListをフィルタ処理します。

これはjavaで可能ですか?私を助けてください。 ありがとうございます私は最善を尽くしましたが、私は理解しません。

private HashMap<String, String> insertData(String documentNo, String id, Date date, 
     BigDecimal amount, BusinessPartner bpartner, int group, String tabId, 
     SimpleDateFormat dateFormat, boolean credits, BigDecimal doubtfulDebt, String Address1, 
     String Address2, String Zip, String City, String State, String Email, String Phone_h, 
     BigDecimal InvoiceAmount, int Durations, BigDecimal Discount, BigDecimal Payments, 
     BigDecimal Writeoffs, BigDecimal Outstandings, String Coa, ElementValue ev) { 
    HashMap<String, String> psData = new HashMap<String, String>(); 
    psData.put("INVOICE_NUMBER", documentNo); 
    psData.put("INVOICE_ID", id); 
    psData.put("INVOICE_DATE", dateFormat.format(date)); 
    psData.put("AMOUNT" + group, amount.compareTo(BigDecimal.ZERO) == 0 ? null : amount.toString()); 
    psData.put("DOUBTFUL_DEBT", 
     doubtfulDebt.compareTo(BigDecimal.ZERO) == 0 ? null : doubtfulDebt.toString()); 
    BigDecimal percentage = calculatePercentage(amount.add(doubtfulDebt), doubtfulDebt); 
    psData.put("PERCENTAGE", 
     percentage.compareTo(BigDecimal.ZERO) == 0 ? null : percentage.toString()); 
    if (credits) { 
     psData.put("SHOW_NETDUE", amount.add(doubtfulDebt).toString()); 
    } else { 
     psData.put("NETDUE", amount.add(doubtfulDebt).toString()); 
     psData.put("SHOW_NETDUE", amount.add(doubtfulDebt).toString()); 
    } 
    psData.put("BPARTNER", bpartner.getId().toString()); 
    psData.put("BPARTNERNAME", bpartner.getIdentifier().toString()); 
    psData.put("TABID", tabId); 
    psData.put("address1", Address1); 
    psData.put("address2", Address2); 
    psData.put("zip", Zip); 
    psData.put("city", City); 
    psData.put("state", State); 
    psData.put("email", Email); 
    psData.put("phone_h", Phone_h); 
    psData.put("invoiceamount", 
     InvoiceAmount.compareTo(BigDecimal.ZERO) == 0 ? "-" : InvoiceAmount.toString()); 
    psData.put("durations", 
     Integer.toString(Durations).equals("0") ? "-" : Integer.toString(Durations)); 
    psData.put("payments", Payments.compareTo(BigDecimal.ZERO) == 0 ? "0.00" : Payments.toString()); 
    psData.put("writeoffs", 
     Writeoffs.compareTo(BigDecimal.ZERO) == 0 ? "0.00" : Writeoffs.toString()); 
    psData.put("outstandings", 
     Outstandings.compareTo(BigDecimal.ZERO) == 0 ? "0.00" : Outstandings.toString()); 
    psData 
     .put("discounts", Discount.compareTo(BigDecimal.ZERO) == 0 ? "0.00" : Discount.toString()); 
    psData.put("coa", Coa); 
    psData.put("ev", ev.getId()); 
    return psData; 

    } 
+3

'Collections.sort()'と 'Comparator > 'を使ってマップから正しい値を取り出して比較します。 – Thomas

+0

@Thomasあなたは私に例を挙げてください。 – ADMIN

+0

Yikes:その多くのパラメータを持つ方法は、常に疑わしいです。たとえば、間違った順序で2つのパラメータを渡すことは非常に簡単で、気づかないでしょう。 [builder pattern](https://en.wikipedia.org/wiki/Builder_pattern)の使用を検討する必要があります。 –

答えて

2

(ソートに関するタイトルに基づいていない)質問に基づいています。あなたは、Java 8

 List<Map<String,String>> list = new ArrayList<>(); 

     Map<String,String> map = new HashMap<>(); 
     map.put("prop1", "value1"); 
     map.put("prop2", "value2"); 
     map.put("coa", "value3"); 
     list.add(map); 

     map = new HashMap<>(); 
     map.put("prop1", "value1"); 
     map.put("prop2", "value2"); 
     map.put("coa", "value3"); 
     list.add(map); 

     map = new HashMap<>(); 
     map.put("prop1", "v1"); 
     map.put("prop2", "v2"); 
     map.put("coa", "v3"); 
     list.add(map); 

     List<Map<String,String>> listMapWithProp3EqualValue3 = list.stream() 
       .filter(p -> p.get("coa").equals("value3")).collect(Collectors.toList()); 

     System.out.println("Filtered List with coa=value3 :" + listMapWithProp3EqualValue3); 

     listMapWithProp3EqualValue3 = list.stream() 
       .filter(p -> p.get("coa").equals("v3")).collect(Collectors.toList()); 

     System.out.println("Filtered List coa=v3 :" + listMapWithProp3EqualValue3); 

を使用しているホープあなたは

(勘定科目表)COAに基づいてリストをフィルタリングするためのソリューションを必要とする私はストリームにリストを変換し、ラムダを使用して、それをフィルタリングしています。

java 8を使用していない場合は、以下を確認してください。

Lambdaj

は、それはあなたのコレクションをフィルタリングすることができます。

希望すると助かります。

+0

私はフィルターリストを持っていますが、特定の値ではないすべての値を使用しています@ Beniton – ADMIN

+0

@ADMIN申し訳ありませんが、私はあなたを取得しませんでした。詳細を教えていただけますか?あなたはすべてのコーラに基づいてフィルタリングしたいですか?つまり、有効なCOAを持っている場合は、nullでないかどうかを確認するだけです。 – Beniton

0

私はあなたに感謝します。

Collections.sort(hashMapList, new Comparator<HashMap<String, String>>() { 
      public int compare(HashMap<String, String> mapping1, HashMap<String, String> mapping2) { 
       return mapping1.get("coa").compareTo(mapping2.get("coa")); 
      } 
      }); 
関連する問題