Java的Steam流排序

常用排序

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()));//先以属性一升序,再进行属性二降序<br><br><br>

根据最接近的值进行排序

实体类

public class GeoRegularSelectInfo implements Serializable {
    private String originId;
    private String destId;
    private Integer earliestdeparttime;
    private Integer latestdeparttime;
    private Integer regulardeparttime;
}

方法一

GeoRegularSelectInfo geoRegularSelectInfo = userRegularQueryInfo.stream().sorted(new Comparator<GeoRegularSelectInfo>() {
    @Override
    public int compare(GeoRegularSelectInfo o1, GeoRegularSelectInfo o2) {
        return Math.abs(o1.getEarliestdeparttime() - currentMinutes) - Math.abs(o2.getEarliestdeparttime() - currentMinutes);
    }
}).collect(Collectors.toList()).get(0);

方法二

GeoRegularSelectInfo geoRegularSelectInfo = userRegularQueryInfo.stream().reduce((a, b) -> 
Math.abs(a.getRegulardeparttime() - currentMinutes) < Math.abs(b.getRegulardeparttime() - currentMinutes) ? b : a)
        .orElse(null);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容