Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

java

json

java-8

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
like image 864
Karthikeyan Avatar asked Feb 18 '26 00:02

Karthikeyan


1 Answers

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));
like image 134
Matthieu Gabin Avatar answered Feb 20 '26 12:02

Matthieu Gabin