赞
踩
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);
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());
上面这种排序是分组排序,跟在数据中是一样的,即
image.png
综上,使用stream排序可以把在数据库中的使用sql实现的,优化成在业务中实现,数据库资源是宝贵的,能在代码中实现的尽量在代码中实现,毕竟扩展服务比扩展数据库便宜的多。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。