内存分页 (java8 字段排序)

发布于 2020-08-06  741 次阅读


import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;

/**
 * @author yaoguanquan
 * @creote 2020-08-06-15:36
 */
public class MemoryPagination {

    /**
     * 内存分页
     *
     * @param records  待分页的数据
     * @param pageNum  当前页码
     * @param pageSize 每页显示的条数
     * @return 分页之后的数据
     */
    public static <T> List<T> pagination(List<T> records, int pageNum, int pageSize) {
        if (CollectionUtils.isEmpty(records)) {
            return Collections.emptyList();
        }
        int totalCount = records.size();
        int remainder = totalCount % pageSize;
        int pageCount = (remainder > 0) ? totalCount/pageSize + 1 : totalCount/pageSize;
        if (remainder == 0) {
            return records.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
        } else {
            if (pageNum == pageCount) {
                return records.stream().skip((pageNum - 1) * pageSize).limit(totalCount).collect(Collectors.toList());
            } else {
                return records.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
            }
        }
    }

    public static void main(String[] args) {
        List<SysDict> list = new ArrayList<>();
        list.add(new SysDict(1,"test1","1",1,3.32));
        list.add(new SysDict(3,"test3","3",3,4.13));
        list.add(new SysDict(2,"test2","11",2,4.11));
        list.add(new SysDict(4,"test4","4",4,23.23));
        list.add(new SysDict(5,"test5","5",5,0.23));
        list.add(new SysDict(6,"test6","22",6,0.23));
        list.add(new SysDict(7,"test7","3",7,0.23));
        list.add(new SysDict(8,"test8","0.2",8,0.23));


        /*

            List<类> list; 代表某集合

            //返回 对象集合以类属性一升序排序
            list.stream().sorted(Comparator.comparing(类::属性一));

            //返回 对象集合以类属性一降序排序 注意两种写法
            list.stream().sorted(Comparator.comparing(类::属性一).reversed());//先以属性一升序,结果进行属性一降序
            list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()));//以属性一降序

            //返回 对象集合以类属性一升序 属性二升序
            list.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二));

            //返回 对象集合以类属性一降序 属性二升序 注意两种写法
            list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二));//先以属性一升序,升序结果进行属性一降序,再进行属性二升序
            list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()).thenComparing(类::属性二));//先以属性一降序,再进行属性二升序

            //返回 对象集合以类属性一降序 属性二降序 注意两种写法
            list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二,Comparator.reverseOrder()));//先以属性一升序,升序结果进行属性一降序,再进行属性二降序
            list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()).thenComparing(类::属性二,Comparator.reverseOrder()));//先以属性一降序,再进行属性二降序

            //返回 对象集合以类属性一升序 属性二降序 注意两种写法
            list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二).reversed());//先以属性一升序,升序结果进行属性一降序,再进行属性二升序,结果进行属性一降序属性二降序
            list.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二,Comparator.reverseOrder()));//先以属性一升序,再进行属性二降序

         */

        // 排序
        //先以属性一升序,升序结果进行属性一降序,再进行属性二升序,结果进行属性一降序属性二
        list.stream().sorted(
                Comparator.comparing(SysDict::getSs).reversed().thenComparing(SysDict::getSort).reversed()
        );

        List<SysDict> pagination = pagination(list, 1, 2);
        System.out.println(pagination.toString());

    }

}


//class SysDict {
//    private Integer id;
//    private String name;
//    private String value;
//    private Integer sort;
//    private Double ss;
//
//    public SysDict(Integer id, String name, String value, Integer sort,Double ss) {
//        this.id = id;
//        this.name = name;
//        this.value = value;
//        this.sort = sort;
//        this.ss = ss;
//    }
//
//    public Double getSs() {
//        return ss;
//    }
//
//    public void setSs(Double ss) {
//        this.ss = ss;
//    }
//
//    public Integer getId() {
//        return id;
//    }
//
//    public void setId(Integer id) {
//        this.id = id;
//    }
//
//    public String getName() {
//        return name;
//    }
//
//    public void setName(String name) {
//        this.name = name;
//    }
//
//    public String getValue() {
//        return value;
//    }
//
//    public void setValue(String value) {
//        this.value = value;
//    }
//
//    public Integer getSort() {
//        return sort;
//    }
//
//    public void setSort(Integer sort) {
//        this.sort = sort;
//    }
//
//    @Override
//    public String toString() {
//        return "SysDict{" +
//                "id=" + id +
//                ", name='" + name + '\'' +
//                ", value='" + value + '\'' +
//                ", sort=" + sort +
//                ", ss=" + ss +
//                '}';
//    }
//
//}

公交车司机终于在众人的指责中将座位让给了老太太