美文网首页
Java List操作5(sort—排序)

Java List操作5(sort—排序)

作者: 雪飘千里 | 来源:发表于2019-07-31 14:35 被阅读0次

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<DeviceFaultReportHistogram>{
    @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<T>);
  • list.sort(Comparator<T>);
  • lamdba表达式
 Collections.sort(list, new Comparator<DeviceFaultReportHistogram>() {
                        @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<DeviceFaultReportHistogram>() {
                        @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<ActivityGoodVo> 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实现的,优化成在业务中实现,数据库资源是宝贵的,能在代码中实现的尽量在代码中实现,毕竟扩展服务比扩展数据库便宜的多。

相关文章

  • Java List操作5(sort—排序)

    1、默认排序 实体类实现 Comparable 接口,实现compareTo()方法,然后调用Collection...

  • sort与sorted

    python中两个排序函数:sort():- list.sort(),是操作函数,没有返回值,在原list上操作-...

  • Java 19-7 集合工具类

    Collections 为工具类 操作Collection的静态方法对list排序 sort(list); 模拟最...

  • collections在java中的常见用法

    工具类collections用于操作集合类,如List,Set,常用方法有: 1) 排序(Sort) 使用sort...

  • 集合工具类 Collections

    Collections中定义的都是操作Collections的静态方法 常用方法 对list排序sort(list...

  • 2018-04-26

    Java学习随笔8 List排序 这里的list默认是ArrayLIst 首先ArrayList有两种sort方法...

  • Java集合排序

    Java API提供了两种方法来排序: 一、Collections.sort(List list) 使用此API排...

  • 2019-05-06派森学习第168天

    71、举例sort和sorted对列表排序,list=[0,-1,3,-10,5,9] 72、对list排序foo...

  • java常用代码之二

    1.排序 数组:Arrays.sort(strings); List:Collections.sort(list)...

  • python语法备忘录

    list.sort() 列表排序,list.sort(cmp=None, key=None, reverse=Fa...

网友评论

      本文标题:Java List操作5(sort—排序)

      本文链接:https://www.haomeiwen.com/subject/kalzrctx.html