Java Stream流零基础教程

作者:填丶涂 时间:2023-08-15 19:33:20 

一、Stream流介绍

在JDK8时,JAVA新增了lambda表达式,它与 java.io 包里的 InputStream和 OutputStream是完全不同的概念,他更跟流没有任何关系。它也不同于 StAX 对 XML解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的Stream。

JDK8 中的 Stream 是对集合(Collection)对象功能的增强,它借助于lambda表达式,更优雅的表达风格,极大的提高编程效率和程序可读性。它针对于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作。不多说,上用法。

二、Stream流实现与传统方式实现对比

**案例:**找出列表中包含张三且姓名长度为2的名字

2.1、传统方式实现

package com.controller;
import java.util.ArrayList;
public class Aoo {
   public static void main(String[] args) {
       // 1.定义一个集合
       ArrayList<String> list = new ArrayList<>();
       list.add("张三");
       list.add("张四");
       list.add("四");
       list.add("张四");
       list.add("张四");
       list.add("张四");
       list.add("张四");
       // 2.挑选list中包含张三的
       ArrayList<String> list1 = new ArrayList<>();
       for (String s : list) {
           if (s.startsWith("张三")){
               list1.add(s);
           }
       }
       System.out.println("挑选list包含张三的结果:"+list1);
       // 3.再从list1中挑选挑选名字长度为2的
       ArrayList<String> list2 = new ArrayList<>();
       for (String s : list1) {
           if (s.length() == 2){
               list2.add(s);
           }
       }
       System.out.println("挑选list1长度为2的结果:"+list2);
       // 4、遍历
       for (String s : list2) {
           System.out.println("最终结果 = " + s);
       }
   }
}

2.2、Stream流方式实现

package com.controller;
import java.util.ArrayList;
public class Boo {
   public static void main(String[] args) {
       // 定义一个集合,并填入数据
       ArrayList<String> list = new ArrayList<>();
       list.add("张三");
       list.add("李四");
       list.add("李四");
       list.add("李四");
       list.add("王五");
       list.add("王五");
       list.add("王五");
       //Stream流的实现
       list.stream()
               .filter((name) -> name.startsWith("张三"))
               .filter((name) -> name.length()==2)
               .forEach((name) -> System.out.println(name));
   }
}

三、Stream流的常用API

3.1、stream流的获取

在Collection集合下,均有一个stream(),另一个即是用Stream的一个静态方法 of() 实现。

上代码:

package com.controller;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Stream;
public class Boo {
   public static void main(String[] args) {
       //Collction集合
       Collection<String> collection = new ArrayList();
       Stream<String> stream = collection.stream();
       //List集合
       List<String> list = new ArrayList<>();
       Stream<String> stream1 = list.stream();
       //ArrayList集合
       ArrayList<String> arrayList = new ArrayList<>();
       Stream<String> stream2 = arrayList.stream();
       //LinkedList集合
       LinkedList<String> linkedList = new LinkedList<>();
       Stream<String> stream3 = linkedList.stream();
       //of()方式的实现
       List<String> list1 = new ArrayList<>();
       Stream<List<String>> stream4 = Stream.of(list1);
       //传入可变数组
       Stream<String> stream5 = Stream.of("1","2","3","4");
   }
}

3.2、forEach()

遍历流中的对象

package com.controller;
import java.util.ArrayList;
public class Aoo {
   public static void main(String[] args) {
       // 定义一个集合
       ArrayList<String> list = new ArrayList<>();
       list.add("张三");
       list.add("李四");
       list.add("李四");
       list.add("李四");
       list.add("李四");
       list.add("李四");
       list.add("李四");
       //遍历流的对象
       list.stream().forEach((name) -> System.out.println(name));
   }
}

3.3、filter()

filter对流对象进行过滤操作

package com.controller;
import java.util.ArrayList;
public class Aoo {
   public static void main(String[] args) {
       // 定义一个集合
       ArrayList<String> list = new ArrayList<>();
       list.add("张三");
       list.add("李四二");
       list.add("李四我");
       list.add("李四去晚");
       list.add("李四请问");
       list.add("李四去");
       list.add("李四我");
       //过滤流的对象
       list.stream().filter((name) -> name.length()==2);
   }
}

3.4、map()

map()是对集合中的对象进行映射的,将对象从一种类型转换成另一种类型

package com.controller;
import java.util.ArrayList;
public class Aoo {
   public static void main(String[] args) {
       // 定义一个集合
       ArrayList<String> list = new ArrayList<>();
       list.add("1");
       list.add("2");
       list.add("3");
       list.add("4");
       list.add("5");
       list.add("6");
       list.add("7");
       //map()是对集合中的对象进行映射的,将对象从一种类型转换成另一种类型
       list.stream().map(num -> Integer.parseInt(num));
   }
}

3.5、count()

count是对流数据统计的方法,但是count之后返回的是long类型,因此无法再进行流操作。

package com.controller;
import java.util.ArrayList;
public class Aoo {
   public static void main(String[] args) {
       // 定义一个集合
       ArrayList<String> list = new ArrayList<>();
       list.add("1");
       list.add("2");
       list.add("3");
       list.add("4");
       list.add("5");
       list.add("6");
       list.add("7");
       //count()对流数据进行统计
       System.out.println(list.stream().count());
   }
}
3.6、limit()

3.6、limit()

选取流数据的前多少条数据

package com.controller;
import java.util.ArrayList;
public class Aoo {
   public static void main(String[] args) {
       // 定义一个集合
       ArrayList<String> list = new ArrayList<>();
       list.add("李二1");
       list.add("李二2");
       list.add("李二3");
       list.add("李二4");
       list.add("李二5");
       list.add("李二6");
       list.add("李二7");
       //limit() 选取流数据的前多少条数据
       list.stream().limit(2);
   }
}

3.7、skip()

跳过流数据的前多少条数据,该方法与limit()方法刚好相反

package com.controller;
import java.util.ArrayList;
public class Aoo {
   public static void main(String[] args) {
       // 定义一个集合
       ArrayList<String> list = new ArrayList<>();
       list.add("李小龙1");
       list.add("李小龙2");
       list.add("李小龙3");
       list.add("李小龙4");
       list.add("李小龙5");
       list.add("李小龙6");
       list.add("李小龙7");
       //skip() 跳过流数据的前多少条数据
       list.stream().skip(2);
   }
}

3.8、concat()

Stream的静态方法concat()实现对两个流数据进行合并

package com.controller;
import java.util.ArrayList;
import java.util.stream.Stream;
public class Aoo {
   public static void main(String[] args) {
       // 定义一个集合
       ArrayList<String> list = new ArrayList<>();
       list.add("张三丰1");
       list.add("张三丰2");
       list.add("张三丰3");
       list.add("张三丰4");
       list.add("张三丰5");
       list.add("张三丰6");
       list.add("张三丰7");
       // 定义一个集合
       ArrayList<String> list1 = new ArrayList<>();
       list1.add("1");
       list1.add("2");
       list1.add("3");
       list1.add("4");
       list1.add("5");
       list1.add("6");
       list1.add("7");
       //concat()实现对两个流数据进行合并
       Stream.concat(list.stream(),list1.stream());
   }
}

四、总结

Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream API可以极大提高Java程序员的生产力,让

程序员写出高效率、干净、简洁的代码。这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。

来源:https://blog.csdn.net/weixin_51423778/article/details/127204113

标签:Java,Stream,流
0
投稿

猜你喜欢

  • 线程局部变量的实现 ThreadLocal使用及场景介绍

    2023-11-10 03:19:26
  • native.js获取手机硬件基本信息实例代码android版

    2023-10-19 13:33:09
  • 深入浅析hbase的优点

    2021-08-06 19:27:58
  • 基于Java实现多线程下载并允许断点续传

    2021-07-19 03:05:52
  • Android录音功能的实现以及踩坑实战记录

    2022-01-06 14:03:29
  • springboot使用事物注解方式代码实例

    2022-07-09 00:13:21
  • 浅谈如何在项目中使用Spring Cloud Alibaba Sentinel组件

    2022-07-12 14:32:17
  • C 语言进制之间的转换

    2021-06-17 07:19:31
  • C#对Word文档的创建、插入表格、设置样式等操作实例

    2021-10-24 23:13:46
  • C#中Lambda表达式的三种写法

    2022-03-27 02:50:27
  • GC算法实现垃圾优先算法

    2023-11-07 17:25:15
  • Android实现九宫格拼图游戏

    2021-06-11 09:41:13
  • Android N获取外置SD卡或挂载U盘路径的方法

    2023-07-14 22:21:03
  • .net的序列化与反序列化实例

    2022-12-29 00:50:50
  • 在eclipse中中文汉字乱码的解决方案

    2023-11-25 10:13:27
  • IDEA 2021.1 的 Win 和 Mac 快捷键大全

    2023-02-27 13:01:28
  • 基于JDK动态代理原理解析

    2022-07-24 19:43:33
  • C#集合遍历时删除和增加元素的方法

    2021-12-11 18:53:24
  • Mybatis结果生成键值对的实例代码

    2023-11-28 15:50:58
  • Android连接MySQL数据库并进行增删改查操作示例讲解

    2023-07-03 13:20:15
  • asp之家 软件编程 m.aspxhome.com