Java Stream流零基础教程

 更新时间:2022年11月10日 16:30:53   作者:填丶涂  
Java8的另一大亮点Stream,它与java.io包里的InputStream和OutputStream是完全不同的概念,下面这篇文章主要给大家介绍了关于Java8中Stream详细使用方法的相关资料,需要的朋友可以参考下

一、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程序员的生产力,让

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

到此这篇关于Java Stream流零基础教程的文章就介绍到这了,更多相关Java Stream流内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java深入了解数据结构中常见的排序算法

    Java深入了解数据结构中常见的排序算法

    这篇文章主要介绍了Java常用的排序算法及代码实现,在Java开发中,对排序的应用需要熟练的掌握,这样才能够确保Java学习时候能够有扎实的基础能力。那Java有哪些排序算法呢?本文小编就来详细说说Java常见的排序算法,需要的朋友可以参考一下
    2022-01-01
  • Java栈的运用之中缀表达式求值详解

    Java栈的运用之中缀表达式求值详解

    本文来介绍一题中缀表达式求值的问题,就是给定一个中缀计算式,编写程序将这个式子运算结果给计算出来,其实和后缀表达式的思路差不多,都是栈的运用问题,感兴趣的可以了解一下
    2022-11-11
  • Activiti常用类简介

    Activiti常用类简介

    这篇文章主要介绍了Activiti常用类,需要的朋友可以参考下
    2014-08-08
  • 几种JAVA细粒度锁的实现方式

    几种JAVA细粒度锁的实现方式

    这篇文章主要为大家详细介绍了几种JAVA细粒度锁的实现方式,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • JavaEE通过response实现请求重定向

    JavaEE通过response实现请求重定向

    这篇文章主要介绍了JavaEE通过response实现请求重定向的方法,非常的简单实用,有需要的朋友可以参考下
    2014-10-10
  • java伪泛型知识点详解

    java伪泛型知识点详解

    在本篇文章里小编给大家整理的是一篇关于java伪泛型知识点详解内容,有需要的朋友们可以跟着学习参考下。
    2021-06-06
  • java并发编程专题(十一)----(JUC原子类)数组类型详解

    java并发编程专题(十一)----(JUC原子类)数组类型详解

    这篇文章主要介绍了JAVA JUC原子类 数组类型详解的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Java中的日期时间类实例详解(Date、Calendar、DateFormat)

    Java中的日期时间类实例详解(Date、Calendar、DateFormat)

    在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理,这篇文章主要介绍了Java中的日期时间类详解(Date、Calendar、DateFormat),需要的朋友可以参考下
    2023-11-11
  • spring boot+jwt实现api的token认证详解

    spring boot+jwt实现api的token认证详解

    这篇文章主要给大家介绍了关于spring boot+jwt实现api的token认证的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一学习学习吧
    2018-12-12
  • Java使用设计模式中的工厂方法模式实例解析

    Java使用设计模式中的工厂方法模式实例解析

    当系统准备为用户提供某个类的子类的实例,又不想让用户代码和该子类形成耦合时,就可以使用工厂方法模式来设计系统.工厂方法模式的关键是在一个接口或抽象类中定义一个抽象方法,下面我们会具体介绍Java使用设计模式中的工厂方法模式实例解析.
    2016-05-05

最新评论