• Java流式编程的使用


    流式编程的使用步骤

    使用流式编程的步骤就是: 设置数据源, 设置数据处理的方式,设置收集结果的方式

    使用filter方法实现过滤条件

    例子为下(查询年龄大于18的用户):

    1. @Test
    2. public void streamTest1() {
    3. List students = Arrays.asList(
    4. new Student("tolen", 22, "男"),
    5. new Student("ostkakaw", 19, "女"),
    6. new Student("tolenaitolen", 18, "男")
    7. );
    8. List result = students
    9. .stream() //stream方法就是设置数据源
    10. .filter(user -> user.getAge() > 18) //设置过滤条件,这里的过滤条件使用lambda表达式
    11. .collect(Collectors.toList());//将结果设置为一个list
    12. for (Student student : result) {
    13. System.out.println(student.toString());
    14. }
    15. }

     结果为下:

    特殊情况

     1. 限制条件存在多个且需要同时成立(且)

    编写格式为下:

    1. @Test
    2. public void streamTest3() {
    3. List students = Arrays.asList(
    4. new Student("tolen", 22, "男"),
    5. new Student("ostkakaw", 19, "女"),
    6. new Student("tolenaitolen", 18, "男")
    7. );
    8. //编写限制条件
    9. Predicate predicate1 = user -> user.getAge() == 18;
    10. Predicate predicate2 = user -> user.getName() == "tolenaitolen";
    11. List result = students
    12. .stream() //stream方法就是设置数据源
    13. .filter(predicate1.and(predicate2)) //如果存在多个需要同时成立的条件时,需要使用and()方法
    14. .collect(Collectors.toList());//将结果设置为一个list
    15. for (Student student : result) {
    16. System.out.println(student.toString());
    17. }
    18. }

     结果为下:

    2. 限制条件存在多个且不需要同时成立(或)

     编写格式为下:

    1. @Test
    2. public void streamTest4() {
    3. List students = Arrays.asList(
    4. new Student("tolen", 22, "男"),
    5. new Student("ostkakaw", 19, "女"),
    6. new Student("tolenaitolen", 18, "男")
    7. );
    8. //编写限制条件
    9. Predicate predicate1 = user -> user.getAge() > 18;
    10. Predicate predicate2 = user -> user.getName() == "tolen";
    11. List result = students
    12. .stream() //stream方法就是设置数据源
    13. .filter(predicate1.or(predicate2)) //如果存在多个需要同时成立的条件时,需要使用and()方法
    14. .collect(Collectors.toList());//将结果设置为一个list
    15. for (Student student : result) {
    16. System.out.println(student.toString());
    17. }
    18. }

    结果为下:

    使用limit方法限制list的长度

    例子为下:

    1. @Test
    2. public void streamTest2() {
    3. List students = Arrays.asList(
    4. new Student("tolen", 22, "男"),
    5. new Student("ostkakaw", 19, "女"),
    6. new Student("tolenaitolen", 18, "男")
    7. );
    8. students
    9. .stream()//设置数据源
    10. .limit(2)//设置最大的长度
    11. .collect(Collectors.toList()) //将结果设置为一个list
    12. .forEach(student -> System.out.println(student.toString()));
    13. }

    结果为下:

    使用min和max方法找出最值

     例子为下:

    1. @Test
    2. public void streamTest5() {
    3. List nums = Arrays.asList(4, 5, 1, 3, 6);
    4. Integer maxResult = nums.stream()//设置数据源
    5. .max(Integer::compareTo) //这里的lambda表达式使用Integer默认的比较方法,如果需要查询最小值就使用min方法
    6. .get();//max方法返回的数据是Optional,所以需要使用get方法才获得最终的数据
    7. System.out.println(maxResult);
    8. }

    结果为下:

    如果需要查询最小值的话,我们只需要将max方法换成min方法即可。

    使用sorted方法对list进行排序

     例子为下:

    1. @Test
    2. public void streamTest6() {
    3. List nums = Arrays.asList(4, 5, 1, 3, 6);
    4. nums.stream() //设置数据源
    5. .sorted(Integer::compareTo) //进行排序操作,默认使用升序
    6. .collect(Collectors.toList()).forEach(num -> System.out.println(num));
    7. }

    结果为下:

    特殊情况

     需要实现降序,对应的代格式为下:

    1. @Test
    2. public void streamTest6() {
    3. List nums = Arrays.asList(4, 5, 1, 3, 6);
    4. nums.stream() //设置数据源
    5. .sorted(Comparator.reverseOrder()) //进行排序操作,默认使用升序,lambda表达式设置为降序
    6. .collect(Collectors.toList()).forEach(num -> System.out.println(num));
    7. }

    结果为下:

    使用map方法和reduce方法对应list的数据进行修改

    map方法(返回的结果是多个,而非只有一个,用于返回一个完整的list)

    例子为下:

    1. @Test
    2. public void streamTest7() {
    3. List nums = Arrays.asList(4, 5, 1, 3, 6);
    4. nums.stream() //设置数据源
    5. .map(num -> num + 10)
    6. .collect(Collectors.toList())
    7. .forEach(num -> System.out.println(num));
    8. }

    效果为下:

    reduce方法(返回的结果只有一个,用于做累计操作)

    例子为下:

    1. @Test
    2. public void streamTest8() {
    3. List nums = Arrays.asList(4, 5, 1, 3, 6);
    4. Integer result = nums.stream() //设置数据源
    5. .reduce((num, sum) -> num + sum) //等于做累加操作,在lambda表达式中的参数 num 和sum 的位置可以互换,不影响累加的结果
    6. .get();
    7. System.out.println(result);
    8. }

     结果为下:

    等于做累加操作,在lambda表达式中的参数 num 和sum 的位置可以互换,不影响累加的结果。

    使用count方法计算list的长度

    例子为下:

    1. @Test
    2. public void streamTest9() {
    3. List nums = Arrays.asList(4, 5, 1, 3, 6);
    4. long count = nums.stream() //设置数据源
    5. .count();
    6. System.out.println(count);
    7. }

    效果为下:

    使用flatMap方法对数据进行压扁

    例子:

    例子中通过map会获得对应的数组,通过flatMap方法将这些数组压扁为。(便于后续操作)

     作用:将数组转换为流。

  • 相关阅读:
    长期主义,vivo的“逆周期”生长之道
    使用 Amazon Rekognition API 进行文本检测和 OCR
    2023年中秋·国庆节放假通知
    来了~worthington组织培养术语第二弹!
    在线客服系统的优势
    计算机毕业设计django基于python的汽车租赁系统(源码+系统+mysql数据库+Lw文档)
    SpringBoot 工程打包并运行
    (王道考研计算机网络)第四章网络层-第三节4:ARP、DHCP和ICMP
    【Axure高保真原型】输入宽高控制图片尺寸
    【Java】控制语句学习笔记
  • 原文地址:https://blog.csdn.net/Ostkakah/article/details/133129457