通过实例了解Java 8创建Stream流的5种方法

这篇文章主要介绍了通过实例了解Java 8创建Stream流的5种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

不知不觉间,Java已经发展到13了,来不及感慨时间过得真的太快了,来不及学习日新月异的技术更新,目前大多数公司还是使用的JDK8版本,一方面是版本的稳定,另一方面是熟悉,所以很多公司都觉得不升级也挺好。

说到JDK8,真的是一个里程碑的版本,一出世就受到所有开发者的青睐,并主动花时间和精力去学习,也是我见过企业升级JDK最豪爽最不犹豫的一个版本,可见JDK8的受欢迎程度。当然所有的喜爱都是因为它的特性,整理了jdk8的十大主要特性:

  • Lambda表达式
  • Stream函数式操作流元素集合
  • 接口新增:默认方法与静态方法
  • 方法引用,与Lambda表达式联合使用
  • 引入重复注解
  • 类型注解
  • 最新的Date/Time API (JSR 310)
  • 新增base64加解密API
  • 数组并行(parallel)操作
  • JVM的PermGen空间被移除:取代它的是Metaspace(JEP 122)

每一个特性都值得被了解掌握,都值得去学习,提高开发效率或者代码的可读性,具体的特性介绍就不在这儿开展了,感兴趣的小伙伴自行去看,本篇主要介绍一下Java8创建Stream流的5种方法。

Java 8创建Stream流的5种方法

一、使用数组

// 使用数组
    String[] arr = { "ma", "zhi", "chu", "is", "java", "developer", "family" };
    Stream<String> stream = Stream.of(arr);
//    stream = Stream.of("ma", "zhi", "chu", "is", "java", "developer", "family" );

    String[] stringArr = {"ma", "zhi", "chu", "love"};
    Stream<String> stream1 = Arrays.stream(stringArr);

二、使用Collections

// 使用Collections
    List<String> list = new ArrayList<String>();
    list.add("ma");
    list.add("zhi");
    list.add("chu");
    Stream<String> stream2 = list.stream();

三、使用Stream.generate()

// 使用Stream.generate()
    Stream<String> stream3 = Stream.generate(() -> "love").limit(10);
    String[] strArr3 = stream3.toArray(String[]::new);
    System.out.println(Arrays.toString(strArr3));

四、使用 Stream.iterate()

// 使用Stream.iterate()
    Stream<BigInteger> bigIntStream = Stream.iterate(BigInteger.ZERO, n -> n.add(BigInteger.ONE)).limit(10);
    BigInteger[] bigIntArr = bigIntStream.toArray(BigInteger[]::new);
    System.out.println(Arrays.toString(bigIntArr));

五、使用流行的APIs,如Pattern.compile().splitAsStream()

// 5、使用Popular APIs
    String sentence = "ma zhi chu is a Java wechat official account.";
    Stream<String> wordStream = Pattern.compile("\\W").splitAsStream(sentence);
    String[] wordArr = wordStream.toArray(String[]::new);
    System.out.println(Arrays.toString(wordArr));

看一下完整示例,

package com.mzc.common.stream;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Stream;

/**
 * <p class="detail">
 * 功能: Java8创建流的5种方法
 * </p>
 *
 * @author Moore
 * @ClassName Create stream.
 * @Version V1.0.
 * @date 2019.12.02 11:55:24
 */
public class CreateStream {

  public static void main(String[] args) {

    // 1、使用数组
    String[] arr = { "ma", "zhi", "chu", "is", "java", "developer", "family" };
    Stream<String> stream = Stream.of(arr);
//    stream = Stream.of("ma", "zhi", "chu", "is", "java", "developer", "family" );

    String[] stringArr = {"ma", "zhi", "chu", "love"};
    Stream<String> stream1 = Arrays.stream(stringArr);

    System.out.println(Arrays.toString(stream.toArray(String[]::new)));
    System.out.println(Arrays.toString(stream1.toArray(String[]::new)));

    // 2、使用Collections
    List<String> list = new ArrayList<String>();
    list.add("ma");
    list.add("zhi");
    list.add("chu");
    Stream<String> stream2 = list.stream();
    stream2.forEach(l->{
      System.out.println(l);
    });

    // 3、使用Stream.generate()
    Stream<String> stream3 = Stream.generate(() -> "love").limit(10);
    String[] strArr3 = stream3.toArray(String[]::new);
    System.out.println(Arrays.toString(strArr3));

    // 4、使用Stream.iterate()
    Stream<BigInteger> bigIntStream = Stream.iterate(BigInteger.ZERO, n -> n.add(BigInteger.ONE)).limit(10);
    BigInteger[] bigIntArr = bigIntStream.toArray(BigInteger[]::new);
    System.out.println(Arrays.toString(bigIntArr));

    // 5、使用Popular APIs
    String sentence = "ma zhi chu is a Java wechat official account.";
    Stream<String> wordStream = Pattern.compile("\\W").splitAsStream(sentence);
    String[] wordArr = wordStream.toArray(String[]::new);
    System.out.println(Arrays.toString(wordArr));
  }
}

运行结果:

可以看见,以上五种方式都可以创建stream流来操作数据,使用哪一种方式创建看具体场景而言。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java如何使用Optional与Stream取代if判空逻辑(JDK8以上)

    通过本文你可以用非常简短的代码替代业务逻辑中的判null校验,并且很容易的在出现空指针的时候进行打日志或其他操作. 注:如果对Java8新特性中的lambda表达式与Stream不熟悉的可以去补一下基础,了解概念. 首先下面代码中的List放入了很多Person对象,其中有的对象是null的,如果不加校验调用Person的getXXX()方法肯定会报空指针错误,一般我们采取的方案就是加上if判断: public class DemoUtils { public static void main(

  • Java Stream 流的使用过程解析

    1. 筛选和切片 用谓词筛选 filter方法接受一个返回boolean的方法. List<Dish> vegetarianMenu=menu.stream().filter(Dish::isVegetarian) .collect(toList()); distinct去重 distinct方法,根据流中元素的hashCode和equals方法.例: List<Integer> numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4); numbe

  • Java8如何将Array转换为Stream的实现

    引言 在 java8 中,您可以使用 Arrays.Stream 或 Stream.of 将 Array 转换为 Stream. 1. 对象数组 对于对象数组,Arrays.stream 和 Stream.of 都返回相同的输出. public static void main(String[] args) { ObjectArrays(); } private static void ObjectArrays() { String[] array = {"a", "b&qu

  • java8中Stream的使用示例教程

    前言 Java8中提供了Stream对集合操作作出了极大的简化,学习了Stream之后,我们以后不用使用for循环就能对集合作出很好的操作. 本文将给大家详细介绍关于java8 Stream使用的相关内容,下面话不多说了,来一起看看详细的介绍吧 1. 原理 Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator. 原始版本的 Iterator,用户只能显式地一个一个遍历元素并对其执行某些操作: 高级版本的 Stream,用户只要给出需

  • Java InputStream的多种使用详解

    以前写东西,尤其是网络传输方面总会碰到将某种格式的文本或者图片等转幻成数据流的方式来传输,那时候用的就直接网上找点就粘贴,也没什么搞懂到底是怎么个机理.后来抽点空就死啃了点这方面的文章,稍微懂了点,特意分享一下. InputStream  FileInputStream BufferInputStream  InputStreamreader ByteArrayInputStream这些东西到底什么关系呢? 一.首先我先理解InputStream是老大,剩下的这些都是为其服务的,先建立一个标准,

  • 关于Java8 parallelStream并发安全的深入讲解

    背景 Java8的stream接口极大地减少了for循环写法的复杂性,stream提供了map/reduce/collect等一系列聚合接口,还支持并发操作:parallelStream. 在爬虫开发过程中,经常会遇到遍历一个很大的集合做重复的操作,这时候如果使用串行执行会相当耗时,因此一般会采用多线程来提速.Java8的paralleStream用fork/join框架提供了并发执行能力.但是如果使用不当,很容易陷入误区. Java8的paralleStream是线程安全的吗 一个简单的例子,

  • java8 stream 操作map根据key或者value排序的实现

    引言 最近小编自己一个人在负责一个项目的后台开发,其中有一部分是统计相关的功能,所以需要一些排序或者分组的操作,之前这种操作小编觉得还是比较麻烦的,虽热有一些现成的工具类,但是工具类的写法也是比较复杂的,但是如果使用java8 stream流的话就比较简单了,并且代码量会大大的减少,下面总结几个对map的操作. 1.map 根据value排序 Map<String,BigDecimal> map =new HashMap<>(); map.put("one",

  • 详解Java8新特性Stream之list转map及问题解决

    List集合转Map,用到的是Stream中Collectors的toMap方法:Collectors.toMap 具体用法实例如下: //声明一个List集合 List<Person> list = new ArrayList(); list.add(new Person("1001", "小A")); list.add(new Person("1002", "小B")); list.add(new Person

  • 通过实例了解Java 8创建Stream流的5种方法

    这篇文章主要介绍了通过实例了解Java 8创建Stream流的5种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 不知不觉间,Java已经发展到13了,来不及感慨时间过得真的太快了,来不及学习日新月异的技术更新,目前大多数公司还是使用的JDK8版本,一方面是版本的稳定,另一方面是熟悉,所以很多公司都觉得不升级也挺好. 说到JDK8,真的是一个里程碑的版本,一出世就受到所有开发者的青睐,并主动花时间和精力去学习,也是我见过企业升级JDK最豪爽

  • Java基础之Stream流原理与用法详解

    目录 一.接口设计 二.创建操作 三.中间操作 四.最终操作 五.Collect收集 Stream简化元素计算 一.接口设计 从Java1.8开始提出了Stream流的概念,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式:依旧先看核心接口的设计: BaseStream:基础接口,声明了流管理的核心方法: Stream:核心接口,声明了流操作的核心方法,其他接口为指定类型的适配: 基础案例:通过指定元素的值,返回一个序列流,元素的内容是字符串,并转换为Long类型,最终计算求和结果并

  • Java线程创建与Thread类的使用方法

    目录 1.线程与Thread类 1.1操作系统中的线程与Java线程 1.1.1线程与Thread类 1.1.2Thread类的构造方法 1.1.3启用java线程必会的方法 1.2第一个Java多线程程序 1.3使用Runnable对象创建线程 1.4使用内部类创建线程 1.5使用Lambda表达式创建线程 1.6多线程并发执行简单演示 1.7多线程并发执行的优势 2.Thread类的常用属性与方法 2.1Thread类中的重要属性 2.2Thread类中常用方法总结 2.2.1常用方法 2.

  • Java 8中 Stream小知识小技巧方法梳理

    目录 前言 只能遍历的一次 Stream 那么为什么流只能遍历一次呢? 流操作 中间操作 终端操作 前言 上篇只是简单的动手操作操作了流(stream),那 stream 到底是什么呢? 官方的简短定义:“从支持数据处理操作的源生成的元素序列” 分成三部分: 元素序列:你可以简单将它类比于一样,不过集合说的是数据的集合,而 stream 重点在于表达计算.如我们之前说到的 filter.map.sorted.limit等等 源:昨天我提到,如果了解过 Liunx 管道命令的朋友们,会知道,Liu

  • Java创建子线程的两种方法

    摘要: 其实两种方法归结起来看还是一种,都是利用Thread的构造器进行创建,区别就是一种是无参的,一种是有参的. 一.继承Thread线程类: 通过继承Thread类,重写run方法,子类对象就可以调用start方法启动线程,JVM就会调用此线程的run方法. 代码如下: public class MyThread extends Thread { public MyThread() { super(); } @Override public void run() { } // 线程执行结束

  • java发送http get请求的两种方法(总结)

    长话短说,废话不说 一.第一种方式,通过HttpClient方式,代码如下: public static String httpGet(String url, String charset) throws HttpException, IOException { String json = null; HttpGet httpGet = new HttpGet(); // 设置参数 try { httpGet.setURI(new URI(url)); } catch (URISyntaxExc

  • PHP创建多级目录的两种方法

    PHP针对目录的创建,有一个专门的函数mkdir():成功,返回true,失败,返回false 函数mkdir有四个参数: path:要创建的目录的名称 mode:权限.默认是0777(最大权限) recursive:设置是否可以创建多级目录(true:可,false:不可) context:文件句柄的环境.context是可修改流的行为的一套选项(很少用到) 下面给大家介绍php创建多级目录的两种方法,具体详情如下所示: 1.使用递归的思想 function mkdirs_2($path){

  • Java编程求二叉树的镜像两种方法介绍

    给出一棵二叉树,求它的镜像,如下图:右边是二叉树是左边二叉树的镜像. 仔细分析这两棵树的特点,看看能不能总结出求镜像的步骤.这两棵树的根节点相同,但他们的左右两个子节点交换了位置.因此我们不妨先在树中交换根节点的两个子节点,就得到了下面一幅图中的第二颗树 解法1(递归) 思路1:如果当前节点为空,返回,否则交换该节点的左右节点,递归的对其左右节点进行交换处理. /*class TreeNode{ int val; TreeNode left=null; TreeNode right=null;

  • Java动态验证码单线设计的两种方法

    1.java的动态验证码我这里将介绍两种方法: 一:根据java本身提供的一种验证码的写法,这种呢只限于大家了解就可以了,因为java自带的模式编写的在实际开发中是没有意义的,所以只供学习一下就可以了,待会讲解的第二种呢就是我们需要掌握的一种模式了: 第一种的代码如下: import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import

  • JAVA实现下载文件功能的两种方法

    第一种方法: public HttpServletResponse download(String path, HttpServletResponse response) { try { // path是指欲下载的文件的路径. File file = new File(path); // 取得文件名. String filename = file.getName(); // 取得文件的后缀名. String ext = filename.substring(filename.lastIndexO

随机推荐