Список объектов Java сортируется по определенному объекту, который не сортируется - PullRequest
0 голосов
/ 19 сентября 2018

У меня следующий 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 голосов
/ 19 сентября 2018

Используйте простое 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.
0 голосов
/ 19 сентября 2018

Когда вы создаете поток и используете отсортированный, вы не меняете фактический список.Таким образом, вы можете сделать следующее:

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

или лучше отсортировать список с помощью метода сортировки

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

И вы можете использовать Comparator.comparing(Item::getCode) для замены компаратора

newItemList
.sort(Comparator.comparing(Item::getCode));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...