2016-11-07 6 views
1

私はList of LinkedHashMapからキーを抽出するプログラムを書いています。抽出されたキーはカンマで連結され、CSVファイルの列見出しとして印刷されます。 flatJson指定した順序でLinkedHashMapからKeySetを取得する

サンプルコンテンツは次のようになります。

{ 
    Submitted_Date=03-11-2016 01:19:41, 
    Comments=, 
    Rating=3, 
    details.name=Willy, 
    details.personalId=S123456A, 
    details.mobileNo=11111111, 
    [email protected], 
    Channel=desktop, 
    Referral_Code=, 
    discount.promoCode=, 
    discount.referral=, 
    policyPlan.grossPremium=788.64, 
    policyPlan.name=Standard, 
    policyPlan.netPremium=788.64 
} 

コード:

private TreeSet<String> collectHeaders(List<LinkedHashMap<String, String>> flatJson) { 
    TreeSet<String> headers = new TreeSet<String>(); 
    for (LinkedHashMap<String, String> linkedMap : flatJson) { 
     headers.addAll(linkedMap.keySet()); 
    } 
    return headers; 
} 

私はこのプログラムから取得していますヘッダの順序は次のとおりです。

Channel 
Comments 
Rating 
Referral_Code 
Submitted_Date 
details.email 
details.personalId 
details.mobileNo 
details.name 
discount.promoCode 
discount.referral 
policyPlan.grossPremium 
policyPlan.name 
policyPlan.netPremium 

ながら期待される出力はflatJsonと同じです:

Submitted_Date 
Comments 
Rating 
details.name 
details.personalId 
details.mobileNo 
details.email 
Channel 
Referral_code 
discount.promoCode 
discount.referral 
policyPlan.grossPremium 
policyPlan.name 
policyPlan.netPremium 

以前、私は順序をサポートしていませんHashMapSetを使用していました。私は以来それらをLinkedHashMapTreeSetに変更しましたが、それでも正しい順序を得ることはできません。

+1

TreeSetではなくLinkedHashSetを使用します –

答えて

2

TreeSetは、の挿入の順序を保持していません。約の要素をソートしています。言い換えれば

:あなたはTreeSetのに文字列オブジェクトを追加した場合、彼らはあなたががそのリストをソートするかのようを命じを入手!

の順番がの場合は、TreeSetの代わりにLinkedHashSetを使用してください。代わりに、TreeSetを作成するときにカスタムComparatorを提供することもできます。これは何とかあなたが探しているオーダーを提供します - それはうまくいくかもしれませんが、ハックアップの回避策のようなにおいがします。

+0

これをLinkedHasSetに変更すると、すぐに問題が解決されます。どうもありがとうございました! – Maruli

関連する問題