代码之家  ›  专栏  ›  技术社区  ›  Karthikeyan

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

  •  3
  • Karthikeyan  · 技术社区  · 6 年前

    我有下面的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 回复  |  直到 6 年前
        1
  •  9
  •   Gabriel Dinant    6 年前

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

    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));
    
        2
  •  3
  •   drowny    6 年前

    使用简单的 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.