我正在编写一个从List of LinkedHashMap中提取密钥的程序。然后,提取的键将与逗号连接,并在CSV文件中打印为列标题。
flatJson的示例内容如下所示:
{
Submitted_Date=03-11-2016 01:19:41,
Comments=,
Rating=3,
details.name=Willy,
details.personalId=S123456A,
details.mobileNo=11111111,
details.email=willy@email.com,
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以前,我使用的是不支持排序的HashMap和Set。从那以后,我把它们改成了LinkedHashMap和TreeSet,但是仍然无法得到正确的订单。
发布于 2016-11-07 06:07:09
TreeSet并不是要保持插入顺序。它是关于排序及其元素的。
换句话说:如果将字符串对象添加到TreeSet中,它们就会被排序,就好像要对列表进行排序一样!
因此,如果您最关心的是订单,那么您应该使用LinkedHashSet而不是TreeSet!或者,您可以在创建比较器时提供自定义TreeSet .不知怎么的,这给了你你想要的命令
https://stackoverflow.com/questions/40458757
复制相似问题