Java对象列表按未排序的特定对象排序

时间:2018-09-19 14:04:57

标签: java json java-8

我有以下JSONArray试图对其进行排序。因此,为此,我将JSONArray转换为ArrayList,然后对其进行排序,然后转换回JSONArray。

请找到初始JSONArray(未按排序顺序)。

[  
   {  

      "code":"TE-7000-8003-W",
      "id":"13342",

   },
   {  
      "code":"TE-7000-8003",
      "id":"13163",
   },
   {  
      "code":"TE-7000-8003-WK",
     "id":"11573",
   },
   {  
      "code":"TE-7000-8003S",
      "id":"11565",

   },
   {  
      "code":"TE-7000-8003-K",
      "id":"11557",
   }
]

请找到下面的代码,将我的JSONArray转换为ArrayList并对它们进行排序。

Item item=null;
List<Item> newItemList = new ArrayList<Item>();
for (int i=0;i<resultJSONArray.length();i++) {
    JSONObject jobj = resultJSONArray.getJSONObject(i);
    item = new Item();
    item.setId(jobj.optString("id"));
    item.setCode(jobj.optString("code"));
    newItemList.add(item);
}

 newItemList
  .stream()
  .sorted((object1, object2) -> object1.getCode().compareTo(object2.getCode()));

Iterator<Item> itr = newItemList.iterator();
while(itr.hasNext()) {
    Item item1=itr.next();
    System.out.println("Item----->"+item1.getCode());
}

以下是输出得到的结果,未排序

Item----->TE-7000-8003-W
Item----->TE-7000-8003
Item----->TE-7000-8003-WK
Item----->TE-7000-8003S
Item----->TE-7000-8003-K

我期望结果如下:

Item----->TE-7000-8003
Item----->TE-7000-8003S
Item----->TE-7000-8003-K
Item----->TE-7000-8003-W
Item----->TE-7000-8003-WK

2 个答案:

答案 0 :(得分:9)

创建流并使用已排序时,您不会更改实际列表。因此,您可以执行以下操作:

List<Item> sortedItemList =newItemList
.stream()
.sorted((object1, object2) -> object1.getCode().compareTo(object2.getCode()))
.collect(Collectors.toList());

或者最好使用sort方法对列表进行排序

newItemList
.sort((object1, object2) -> object1.getCode().compareTo(object2.getCode()));

您可以使用Comparator.comparing(Item::getCode)来替换比较器

newItemList
.sort(Comparator.comparing(Item::getCode));

答案 1 :(得分:3)

使用一个简单的Comparator就可以这样应用到您的列表中;

newItemList
.sort((firstObj, secondObj) -> firstObj.getCode().compareTo(secondObj.getCode()));

或更简单;

newItemList.sort(Comparator.comparing(Item::getCode)); //dont forget to write getter method of Code variable.