简体   繁体   中英

Java List of Objects sort by specific object which is not sorting

Am having the following JSONArray which am trying to sort it. So, for that am converting my JSONArray into ArrayList then am sorting them and converting back into JSONArray.

Please find the initial JSONArray (which is not in sorting order).

[  
   {  

      "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",
   }
]

Please find my below code which am converting my JSONArray into ArrayList and sorting them.

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());
}

Following is the output am getting which is not sorted order

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

Am expecting the result like below :

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

When you create a stream and use sorted you don't change the actual list. So you could do the following:

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

or better sort the list with the sort method

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

And you could use Comparator.comparing(Item::getCode) to replace the comparator

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

Use a simple Comparator to apply on your list just like that ;

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

Or more simple ;

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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