序言

处理数据时,为了使数据库交互性能更高,所以减少sql上对数据的操作,这样代码中处理数据就会变多,stream提供了很多使用的方法,下面就是对stream流简单排序使用例子的介绍。

stream流排序

单字段排序

// 查询数据
List<User> list = userService.getAll();
//对数据集合判空防止空指针异常
if (CollectionUtils.isNotEmpty(list)) {
	//这里是根据userId 进行排序——升序排序
    list =  list.stream().sorted(Comparator.comparing(User::getUserId)).collect(Collectors.toList());
    //这里是根据userId 进行排序——降序排序  reversed()
    list =  list.stream().sorted(Comparator.comparing(User::getUserId).reversed()).collect(Collectors.toList());


}

多字段排序

    //这里是根据userId及userName进行联合升序排序
    list =  list.stream().sorted(Comparator.comparing(User::getUserId).thenComparing(User::getUserName)).collect(Collectors.toList());
    //下面两个结果都是以userId降序userName升序排序的结果,但是查询方式不同
    //先以userId升序,升序结果进行userId降序,再进行userName升序
    list =  list.stream().sorted(Comparator.comparing(User::getUserId).reversed().thenComparing(User::getUserName)).collect(Collectors.toList());
    //先以userId降序,再进行userName升序 **推荐使用该种方式**
    list =  list.stream().sorted(Comparator.comparing(User::getUserId,Comparator.reverseOrder()).thenComparing(User::getUserName)).collect(Collectors.toList());
    //先以userId升序,再进行userName降序
    list =  list.stream().sorted(Comparator.comparing(ser::getUserId).thenComparing(User::getUserName,Comparator.reverseOrder())).collect(Collectors.toList());

取出对象某个属性值的set集合

// 这里是取出对应字段集合,用于匹配数据时,判段是否存在对应数据,以免不必要的循环,提高性能
    Set<Integer> userSet = list .stream().map(User::getUserId).distinct().collect(Collectors.toSet());//distinct用于去重

list 转 map

// 使用stream流将list转为map,key为指定字段的值
Map<Integer, List<User>> stationMap = list .stream().collect(Collectors.groupingBy(User::getUserId));

结语

之前总结过一篇stream流各种用法的博文,这一次主要总结排序的几种用法,还有两个常用的方法,不是职业博主,如果有错误的地方,可以指出来及时改正,有需要其他stream流使用方法的可以私信,看到会及时回复大家,谢谢
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐