繁体   English   中英

根据我的要求对JSON字符串对象进行排序

[英]Sort JSON String object according to my requirement

我有一个清单。 我正在将此列表转换为JSON String对象,并将其发送到UI。

Gson gson = new Gson();
String jsonString = gson.toJson(environmentnamesList);
return jsonString;

这是我的JSON对象。

[{"id":3272,"company_name":"HCL - Demo"},{"id":3255,"company_name":"IBM1 - Test"},{"id"
:3257,"company_name":"ECO1 - Development"},{"id":3253,"company_name":"MindSpace - Development"
},{"id":3256,"company_name":"ABC - Demo"},{"id":3258,"company_name":"CDF - Test"},
{"id":3205,"company_name":"FGR - Production"},{"id":3208,"company_name":"RFGGDDF - Production"
}]

现在,我要按照以下条件对这个JSON对象进行排序:

  1. 如果company_name包含Production(RFGGDDF - Production)优先考虑
  2. 如果company_name包含Development(MindSpace - Development)给予第二优先级
  3. 如果company_name包含Demo (ABC - Demo)赋予第3优先级
  4. ID company_name包含Test(IBM1 - Test)赋予第四优先级

我希望输出看起来像这样:

[{"id":3205,"company_name":"FGR - Production"},{"id":3208,"company_name":"RFGGDDF - Production"},
{"id":3257,"company_name":"ECO1 - Development"},{"id":3253,"company_name":"MindSpace - Development"},
{"id":3272,"company_name":"HCL - Demo"},{"id":3256,"company_name":"ABC - Demo"}
,{"id":3258,"company_name":"CDF - Test"},{"id":3255,"company_name":"IBM1 - Test"}]...

我这样尝试过:

List<String> envTypes = Arrays.asList("Production", "Development", "Demo", "Test");

         Ordering<Environment> ordering = Ordering.natural().onResultOf(----i don't know what arg i have to pass----);
         Collections.sort(environmentnamesList, ordering);

我建议在列表级别而不是json级别进行排序。

像下面这样。 我假设您有一个名为environmentnamesList的Java List ,其中包含类型MyObject的元素。 您可以按以下方式对列表进行排序:-

Collections.sort(environmentnamesList, new CustomComparator());
String jsonString = gson.toJson(environmentnamesList);

您可以使用如下所示的CustomComparator:

 public class CustomComparator implements Comparator<MyObject> {
    @Override
    public int compare(MyObject o1, MyObject o2) {
        String[] env =new String[]{"Demo","Test","Developement","Production"};
        int env1=-1,env2=-1;
        for(int i =0; i < env.length; i++)
        {
            if(env1<0 && o1.getCompanyName().contains(env[i]))
            {
                env1=i;
            }

            if(env2<0 && o2.getCompanyName().contains(env[i]))
            {
                env2=i;
            }
        }
        return (env1 < env2) ? 1 :(env1 == env2)? 0: -1;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM