当前位置:   article > 正文

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

java list 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实现的,优化成在业务中实现,数据库资源是宝贵的,能在代码中实现的尽量在代码中实现,毕竟扩展服务比扩展数据库便宜的多。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/995474
推荐阅读
相关标签
  

闽ICP备14008679号