首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按指定顺序从KeySet中检索LinkedHashMap

按指定顺序从KeySet中检索LinkedHashMap
EN

Stack Overflow用户
提问于 2016-11-07 06:04:33
回答 1查看 321关注 0票数 2

我正在编写一个从List of LinkedHashMap中提取密钥的程序。然后,提取的键将与逗号连接,并在CSV文件中打印为列标题。

flatJson的示例内容如下所示:

代码语言:javascript
复制
{
  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
}

代码:

代码语言:javascript
复制
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;
}

我从这个程序中得到的标题顺序是:

代码语言:javascript
复制
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相同

代码语言:javascript
复制
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,但是仍然无法得到正确的订单。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-07 06:07:09

TreeSet并不是要保持插入顺序。它是关于排序及其元素的。

换句话说:如果将字符串对象添加到TreeSet中,它们就会被排序,就好像要对列表进行排序一样!

因此,如果您最关心的是订单,那么您应该使用LinkedHashSet而不是TreeSet!或者,您可以在创建比较器时提供自定义TreeSet .不知怎么的,这给了你你想要的命令

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40458757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档