java排序
自定义排序
- 返回负数,第一个元素排在第二个元素前面;
- 返回0,第二个元素等于第一个元素;
- 返回正数,第一个元素排在第二个元素后面;
public static int customSorted(String x, String y) {
if (x == null && y != null) {
return 1;
}
else if (x != null && y == null) {
return -1;
}
else if (x == null && y == null) {
return -1;
}
else {
//按照读取的list顺序排序
for (String sort : Arrays.asList("11", "13", "12")) {
if (sort.equals(x) || sort.equals(y)) {
if (x.equals(y)) {
return 0;
}
else if (sort.equals(x)) {
return -1;
}
else {
return 1;
}
}
}
return 0;
}
}
Comparator.comparing和compareTo()
- 如果是字符串比较就是用compareTo
- 如果是数值比较就用相应的compare比较,是BigDecimal类型的话,也是用compareTo比较就行
sorted和sort
sort针对于list排序
sorted针对所有可以迭代的集合,并返回一个新的list
下面以2个例子来分别展示sort和sorted分别实现对象中某个字段根据的自定义排序实现相同的排序效果
sorted
dealOneOfferInstAttrs(prodOffInst, result);
prodOfferInsts.stream().sorted(
Comparator.comparing(ProdOffInst::getOffer_type, this::offerShowShorted)
).forEach(o -> dealOneOfferInstAttrs(o, result));
offerShowShorted为自定义排序方法
private int offerShowShorted(String x, String y) {
//按照读取的list顺序排序
for (String sort : Arrays.asList(CoreDataOffer.OFF_0005_11, CoreDataOffer.OFF_0005_13, CoreDataOffer.OFF_0005_12)) {
if (sort.equals(x) || sort.equals(y)) {
if (x.equals(y)) {
return 0;
}
else if (sort.equals(x)) {
return -1;
}
else {
return 1;
}
}
}
return 0;
}
sort
prodOfferInsts.sort(new Comparator<ProdOffInst>() {
@Override
public int compare(ProdOffInst o1, ProdOffInst o2) {
for (String sort : Arrays.asList(CoreDataOffer.OFF_0005_11, CoreDataOffer.OFF_0005_13, CoreDataOffer.OFF_0005_12)) {
if (sort.equals(o1.getOffer_type()) || sort.equals(o2.getOffer_type())) {
if (o1.getOffer_type().equals(o2.getOffer_type())) {
return 0;
}
else if (sort.equals(o1.getOffer_type())) {
return -1;
}
else {
return 1;
}
}
}
return 0;
}
});
Stream.sorted 多字段排序
通过Comparator.thenComparing(Comparator<? super T> other) 实现
功能说明:
1.先以年龄升序
2.当年龄相同时,在以零花钱升序
示例功能代码:
List<userInfo> userList3 = userList.stream()
.sorted(Comparator.comparing(userInfo::getAge).thenComparing(userInfo::getMoney))
.collect(Collectors.toList());
根据某字段排序,null放最后写法
if (o1 != null && o2 != null) {
return o1.compareTo(o2);
} else {
return o1 == null ? 1 : -1;
}

浙公网安备 33010602011771号