Java List 排序Sort 和Sorted
1、sort: list.sort 方法是list方法 對原有list 元素順序位置進行更改排序
如:
listP.sort((x1,x2)->x1.getName().compareTo(x2.name));
2、sorted: sorted 方法是對list轉換成stream流的方法,不對有有list元素排序,而是返回一個排序后的新list:
如:
List<Fruit> listP2 = listP.stream().sorted(Comparator.comparing(Fruit::getName).reversed().thenComparing(Fruit::getWeight)).collect(Collectors.toList());
如果想第二個排序字段倒序排可以如下寫法
List<Fruit> listP2 = listP.stream().sorted(Comparator.comparing(Fruit::getName).reversed()
.thenComparing(Comparator.comparing(Fruit::getWeight).reversed())).collect(Collectors.toList());
下面用多種方式實例進行說明
try {
Fruit p1 = new Fruit();
p1.setName("apple");
p1.setWeight(8);
Fruit p2 = new Fruit();
p2.setName("apple");
p2.setWeight(13);
Fruit p3 = new Fruit();
p3.setName("pear");
p3.setWeight(10);
Fruit p4 = new Fruit();
p4.setName("pear");
p4.setWeight(16);
Fruit p5 = new Fruit();
p5.setName("wang");
p5.setWeight(10);
Fruit p6 = new Fruit();
p6.setName("banana");
p6.setWeight(2);
List<Fruit> listP = Arrays.asList(p1, p2, p3, p4, p5, p6);
// list.sort 對原有list 元素順序位置進行更改排序
// lamda表達式實現 Comparator 簡要主法
listP.sort((x1,x2)->x1.getName().compareTo(x2.name));
// lamda 表達式實現自定義方法
listP.sort((x1,x2)-> {
if(x1.getWeight()>x2.getWeight()){
return 1;
} else if(x1.getWeight()<x2.getWeight()){
return -1;
}else{
return 0;
}
});
//lamda 表達式 顯示實現 comparator方法
listP.sort(new Comparator<Fruit>() {
@Override
public int compare(Fruit o1, Fruit o2) {
return o1.getName().compareTo(o2.getName());
}
});
// list sort 實現多字段排序
Comparator<Fruit> nameComparator=Comparator.comparing(x-> x.getName());
Comparator<Fruit> weightComparator=Comparator.comparing(x-> x.getWeight());
listP.sort(nameComparator.thenComparing(weightComparator));
// list-stream()->sorted 進行排序反回排序后新list,原list元素順序不變
List<Fruit> listP2 = listP.stream().sorted(Comparator.comparing(Fruit::getName).reversed().thenComparing(Fruit::getWeight)).collect(Collectors.toList());
} catch (Exception e) {
e.printStackTrace();
}
}
3、List<String> list 排序 下面代碼實例
String[] strC = new String[]{"賬單優惠", "現金", "賬單減免", "掃碼支付", "團購", "會員卡", "銀行卡"}; List<String> listCategory = new ArrayList<>(); listCategory = Arrays.asList(strC); List<String> list2 = listCategory.stream().sorted(String::compareTo).collect(Collectors.toList()); List<String> list3 = listCategory.stream().sorted((x1, x2) -> { return x1.compareTo(x2); }).collect(Collectors.toList()); Collections.sort(listCategory); Collections.reverse(listCategory);
