java的list如何sort_Java List操作5(sort—排序)

1、默认排序

实体类实现 Comparable 接口,实现compareTo()方法,然后调用Collections.sort(list);

package com.bangmart.device.monitor.vo.report;

import io.swagger.annotations.ApiModelProperty;

import lombok.Data;

@Data

public class DeviceFaultReportHistogram implements Comparable{

@ApiModelProperty(value = "时间")

private String dateStr;

@ApiModelProperty(value = "设备编码")

private String facDevNo;

@ApiModelProperty(value = "设备故障")

private int deviceFaults;

@ApiModelProperty(value = "退款故障")

private int refundFaults;

@ApiModelProperty(value = "网络故障")

private int networkFaults;

@Override

public int compareTo(DeviceFaultReportHistogram o1)

{

int i1 = Integer.valueOf(o1.getDateStr());

int i2 = Integer.valueOf(this.getDateStr());

//升序

return i2-i1;

//降序

// return i1-i2;

}

}

调用Collections.sort(list);

b62acf865df6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

2、 比较器Comparator排序

上面的方法是默认排序,如果需求不是默认排序呢,那可以使用比较器Comparator排序,

Collections.sort(list,Comparator);

list.sort(Comparator);

lamdba表达式

Collections.sort(list, new Comparator() {

@Override

public int compare(DeviceFaultReportHistogram o1, DeviceFaultReportHistogram o2) {

int i1 = Integer.valueOf(o1.getDateStr());

int i2 = Integer.valueOf(o2.getDateStr());

//升序

return i1-i2;

}

});

list.sort( new Comparator() {

@Override

public int compare(DeviceFaultReportHistogram o1, DeviceFaultReportHistogram o2) {

int i1 = Integer.valueOf(o1.getDateStr());

int i2 = Integer.valueOf(o2.getDateStr());

//升序

return i1-i2;

}

});

Collections.sort(histograms,(a,b)-> Integer.valueOf(a.getDateStr())-Integer.valueOf(b.getDateStr()));

3、Java8 stream流处理

3.1 按照dateStr字段排序

histogramList.stream().sorted(Comparator.comparing(DeviceFaultReportHistogram::getDateStr)).collect(Collectors.toList());

3.2 多字段排序

//排序,先按照状态降序,再按照rank升序,再按照periods降序

List resList = voList.stream().sorted(

Comparator.comparing(ActivityGoodVo::getStatus, Comparator.reverseOrder())

.thenComparing(ActivityGoodVo::getRank) ——对第一次排序后内的分组(state分组)进行rank排序

.thenComparing(ActivityGoodVo::getPeriods,Comparator.reverseOrder()))——对第二次排序后的分组(status_rank分组)进行排序

.collect(Collectors.toList());

上面这种排序是分组排序,跟在数据中是一样的,即

b62acf865df6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

综上,使用stream排序可以把在数据库中的使用sql实现的,优化成在业务中实现,数据库资源是宝贵的,能在代码中实现的尽量在代码中实现,毕竟扩展服务比扩展数据库便宜的多。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的List是一种有序的集合,可以存储重复的元素。List中的元素可以通过索引访问,而且可以根据需要动态地调整List的大小。sort()方法是List接口中的一个方法,可以对List中的元素进行排序sort()方法有多种实现方式,可以使用Collections类的sort()方法、List接口自己的sort()方法或者Stream流的sort()方法。其中,Collections类的sort()方法是最常用的一种方式,可以对List中的元素进行升序排序或者降序排序。如果需要对自定义的对象进行排序,可以使用Comparator接口来实现自定义的比较器。 下面是一个使用Collections类的sort()方法对List进行排序的例子: ``` List<Integer> numList = new ArrayList<>(); numList.add(999); numList.add(123); numList.add(456); numList.add(66); numList.add(9); Collections.sort(numList); //使用Collections类的方法排序 System.out.println(numList); ``` 输出结果为:[9, 66, 123, 456, 999] 如果需要对自定义的对象进行排序,可以使用Comparator接口来实现自定义的比较器。下面是一个使用Comparator接口对Person对象进行排序的例子: ``` List<Person> personList = new ArrayList<>(); personList.add(new Person(1, 30, "北京")); personList.add(new Person(2, 20, "西安")); personList.add(new Person(3, 40, "上海")); Collections.sort(personList, new Comparator<Person>() { @Override public int compare(Person p1, Person p2) { return p2.getAge() - p1.getAge(); } }); System.out.println(personList); ``` 输出结果为:[Person(id=3, age=40, name=上海), Person(id=1, age=30, name=北京), Person(id=2, age=20, name=西安)]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值