Java常用的集合排序

排序对象

public class ResultVO {

    private Long id;

    private String name;

    private String time;

    /**
     * 辅助排序字段
     */
    private Integer sortHelp;
}

根据集合中某个字段去重

// 根据集合中id去重
oldResultVOS.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> 
                                            new TreeSet<>(Comparator.comparing(ResultVO::getId))), ArrayList::new));

根据集合中某个字段排序

resultVOS.stream().sorted(Comparator.comparing(ResultVO::getSortHelp, Comparator.nullsLast(Integer::compareTo)).
                                           collect(Collectors.toList());

根据集合中多个字段就行排序

// 使用 thenComparing进行排序, ,Comparator.reverseOrder()按倒序排。默认是升序
resultVOS.stream().sorted(Comparator.comparing(ResultVO::getSortHelp, Comparator.nullsLast(Integer::compareTo)).
                                           thenComparing(ClinicResultVO::getApplyTime,Comparator.reverseOrder())).
                                           collect(Collectors.toList());

根据集合中某个字段的值选择性排序

// 比如stateDc是3 的排第一, 8 的排第二, 6的排第三等等,可以添加一个辅助排序字段,将这个字段按照规则赋值,对这个字段进行排序
 resultVOS.forEach(x->{
           if(x.getStateDc().equals("3")){x.setSortHelp(1);}
           if(x.getStateDc().equals("8")){x.setSortHelp(2);}
           if(x.getStateDc().equals("5")){x.setSortHelp(3);}
});
// 使用设置的值进行排序
resultVOS.stream().sorted(Comparator.comparing(ResultVO::getSortHelp, Comparator.nullsLast(Integer::compareTo)).
                          thenComparing(ClinicResultVO::getApplyTime,Comparator.reverseOrder())).
                          collect(Collectors.toList());
posted @ 2021-04-07 15:51  侯小厨  阅读(532)  评论(0)    收藏  举报
Fork me on Gitee