我有以下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
创建流并使用已排序时,不要更改实际列表。所以你可以做到以下几点:
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));
使用简单的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.