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;
}
posted @   Acelin_H  阅读(65)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示
主题色彩