当前位置: 首页 > news >正文

湖北建设工程造价协会网站达内教育

湖北建设工程造价协会网站,达内教育,黑龙江网站开发,万网做网站文章目录前言假设业务场景排序前的准备正序排序1、数据集合的判空 Optional.isPresent()2、使用sort排序3、将排序后的数据流转换为list你以为这样就完了?倒序排序前言 之前,针对Stream链式编程中的几个方法做了大致的说明。详情可以参考: J…

文章目录

  • 前言
  • 假设业务场景
  • 排序前的准备
  • 正序排序
    • 1、数据集合的判空 Optional.isPresent()
    • 2、使用sort排序
    • 3、将排序后的数据流转换为list
  • 你以为这样就完了?
  • 倒序排序

前言

之前,针对Stream链式编程中的几个方法做了大致的说明。详情可以参考:

JDK 1.8 新特性之Stream 详解个人笔记

但实际业务中,总会存在很多复杂的思维,需要使用到Stream,此时玩的不熟练总感觉无从下手。

今后开始写几种常用的逻辑方式。

假设业务场景

在数据查询出来后,需要针对集合中的数据信息,按照某一字段进行正序倒序排序。

排序前的准备

创建一个数据元类,并填充数据做一个指定对象的数据集合。

class Users{private String userName;private String password;public Users(String userName, String password) {this.userName = userName;this.password = password;}public String getUserName() {return userName;}@Overridepublic String toString() {return "Users{" +"userName='" + userName + '\'' +", password='" + password + '\'' +'}';}
}

测试数据集合如下:

List<Users> users = Arrays.asList(new Users("xj5", "555"), new Users("xj2", "2222"), new Users("xj1", "1111"), new Users("xj3", "3333"));

正序排序

Stream中的排序,通常会使用到其中的sort()方法,接下来就按步骤进行数据排序操作。

1、数据集合的判空 Optional.isPresent()

从数据库等其他方式获取到的数据,并非就一定存在。虽然在本次定义了测试数据集合,但为了代码逻辑的健壮性,则需要经过如下操作处理。

System.out.println("-----> " + Optional.ofNullable(null).isPresent());
System.out.println("-----> " + Optional.ofNullable(new ArrayList<>()).isPresent());

执行后的结果:

-----> false
-----> true

所以,上面的数据集合可以进行下列操作。

Optional.ofNullable(users).orElse(new ArrayList<Users>())

当然也可以通过Optional.ofNullable(集合别名).isPresent()判断集合是否存在,再通过返回 boolean 判断是否继续向下执行链式编程代码。

2、使用sort排序

使用sort排序时,如果其中是对象,则还需要使用一个Comparator.comparing()的方法转换。

Optional.ofNullable(users).orElse(new ArrayList<Users>()).stream().sorted(Comparator.comparing(Users::getUserName))

3、将排序后的数据流转换为list

List<Users> collect = Optional.ofNullable(users).orElse(new ArrayList<Users>()).stream().sorted(Comparator.comparing(Users::getUserName)).collect(Collectors.toList());

执行后,日志输出如下信息:

[Users{userName='xj1', password='1111'},Users{userName='xj2', password='2222'}, Users{userName='xj3', password='3333'}, Users{userName='xj5', password='555'}]

你以为这样就完了?

Optional.ofNullable只是判断传递的参数是否为null,如果传递的参数是对象,则还需要注意对象中的每个属性的数据是否为null。

看一个反例,如果其中某个对象的值是null时,会出现什么样的情况?

package xj.test.streams;import java.util.*;
import java.util.stream.Collectors;public class Test6 {public static void main(String[] args) {List<Users> users = Arrays.asList(new Users("xj5", "555"), new Users("xj2", "2222"), new Users("xj1", "1111"), new Users("xj3", "3333"), new Users(null,"null"));List<Users> collect = Optional.ofNullable(users).orElse(new ArrayList<Users>()).stream().sorted(Comparator.comparing(Users::getUserName)).collect(Collectors.toList());System.out.println(collect);}
}

在这里插入图片描述
此处出现空指针的问题,在于Comparator.comparing中的数据元,存在空的问题,报错!

解决方式也很简单,将需要排序的字段,在sort操作之前可以进行一次过滤,如下:

public class Test6 {public static void main(String[] args) {List<Users> users = Arrays.asList(new Users("xj5", "555"), new Users("xj2", "2222"), new Users("xj1", "1111"), new Users("xj3", "3333"), new Users(null,"null"));List<Users> collect = Optional.ofNullable(users).orElse(new ArrayList<Users>()).stream().filter(x->Objects.nonNull(x) && x.getUserName() != null).sorted(Comparator.comparing(Users::getUserName)).collect(Collectors.toList());System.out.println(collect);}
}

成功解决!

倒序排序

倒序排序操作并不是很复杂,只需要在排序的Comparator.comparing(Users::getUserName)后,将结果使用reversed()反转一下就可以实现。如下所示:

public class Test6 {public static void main(String[] args) {List<Users> users = Arrays.asList(new Users("xj5", "555"), new Users("xj2", "2222"), new Users("xj1", "1111"), new Users("xj3", "3333"), new Users(null,"null"));List<Users> collect = Optional.ofNullable(users).orElse(new ArrayList<Users>()).stream().filter(x->Objects.nonNull(x) && x.getUserName() != null).sorted(Comparator.comparing(Users::getUserName).reversed()).collect(Collectors.toList());System.out.println(collect);}
}

在这里插入图片描述

http://www.khdw.cn/news/14650.html

相关文章:

  • 阿里云网站建设教程电商关键词一般用哪些工具
  • 做的网站老被攻击广州最新疫情情况
  • 要怎样做网站发到百度上面引流推广接单
  • 南宁网站建设费用杨谦教授编的营销课程
  • 企业建站公司哪里有淘宝推广工具
  • 东营网站设计多少钱互联网营销顾问
  • 网站维护费用明细刷关键词排名seo
  • 网站收录提交入口班级优化大师电脑版
  • 呼市网站开发长沙企业关键词优化哪家好
  • 页面素材网站建设及推广优化
  • ftp 企业网站凡科建站官网
  • 海曙区住房和建设局网站官网设计公司
  • 常州网站建设key de网站功能优化的方法
  • 深圳做网站最好的公司网络营销的方式和方法
  • 建设网站财务分析广州网站设计
  • 360建筑网忘记登入密码了怎么办北京seo外包公司要靠谱的
  • 信用网站标准化建设营销型网站建设报价
  • 网页设计与制作教程欧静美福州seo快速排名软件
  • 淘宝联盟网站建设源码网络推广业务
  • 新乡网站开发的公司电话百度24小时人工客服电话
  • 某购物网站建设方案互联网营销推广渠道
  • 西安有关做网站的公司有哪些百度推广官方电话
  • 企业网站一定要备案吗清远市发布
  • 企业品牌网站营销网站建设 全网营销
  • seo优化查询天津seo网站管理
  • 塑料袋销售做哪个网站推广好网站优化人员通常会将目标关键词放在网站首页中的
  • 常平营销网站建设太原网络营销公司
  • 政府网站建设情况工作报告外包公司为什么没人去
  • 怎么在DW网站站点下建立两张网页seo1搬到哪里去了
  • 网站建设与维护专业app关键词推广