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流来操作数据,使用哪一种方式创建看具体场景而言。
本篇就讲到这儿,后面看时间安排,有空的话再写一篇创建stream流之后有什么用,具体有哪些流式操作,有需要或者感兴趣的同学可以给本文留言,给我点互动和动力,谢谢!
文章同步公众号:码之初,每天推送Java技术文章,期待您的关注!
原创不易,转载请注明出处,谢谢!
Java 8创建Stream流的5种方法的更多相关文章
- JAVA中创建线程池的五种方法及比较
之前写过JAVA中创建线程的三种方法及比较.这次来说说线程池. JAVA中创建线程池主要有两类方法,一类是通过Executors工厂类提供的方法,该类提供了4种不同的线程池可供使用.另一类是通过Thr ...
- 【Java8新特性】面试官问我:Java8中创建Stream流有哪几种方式?
写在前面 先说点题外话:不少读者工作几年后,仍然在使用Java7之前版本的方法,对于Java8版本的新特性,甚至是Java7的新特性几乎没有接触过.真心想对这些读者说:你真的需要了解下Java8甚至以 ...
- java中的Stream流
java中的Stream流 说到Stream便容易想到I/O Stream,而实际上,谁规定"流"就一定是"IO流"呢?在Java 8中,得益于Lambda所带 ...
- 总结java创建文件夹的4种方法及其优缺点-JAVA IO基础总结第三篇
本文是Java IO总结系列篇的第3篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...
- .net中创建xml文件的两种方法
.net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...
- Java中获取键盘输入值的三种方法
Java中获取键盘输入值的三种方法 Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值 ...
- 使用java 程序创建格式为utf-8文件的方法(写入和读取json文件)
使用java 程序创建格式为utf-8文件的方法: try{ File file=new File("C:/11.jsp"); ...
- java 获取键盘输入常用的两种方法
java 获取键盘输入常用的两种方法 方法1: 通过 Scanner Scanner input = new Scanner(System.in); String s = input.nextLine ...
- 使用express创建node服务器的两种方法及区别
使用express创建node服务器有两种方法,如下所示: 方法一: var express = require('express'); var app = express(); app.listen ...
随机推荐
- node整个环境的启动
1.启动mongodb服务 在 下载 / mongodb-osx- / 文件夹 新建终端窗口 ,输入命令,启动mongodb服务: mongod --dbpath data --logpath log ...
- CTF必备技能丨Linux Pwn入门教程——ROP技术(上)
Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...
- vue学习指南:第七篇(详细) - Vue的 组件通信
Vue 的 父传子 子传父 一.父组件向子组件传值: 父传子 把需要的数据 传递给 子组件,以数据绑定(v-bind)的形式,传递到子组件内部,供子组件使用 缩写是(:) 1.创建子组件,在src/ ...
- 多线程学习笔记(一) InvokeRequired 和 delegate
入门示例: 假如有一个label,我们希望像走马灯一样,从1显示到100 private void button1_Click(object sender, EventArgs e) { ; i &l ...
- 白话SCRUM 之二:product backlog
在SCRUM方法中明确要求了3个文档: 1 product backlog 2sprint backlog 3 burn-down chart Product backlog 中列举了本项目应该实现的 ...
- apicloud触底加载的简单实现
直接上干货 api.addEventListener({ name: 'scrolltobottom', extra: { threshold: 0 } }, function(ret, err) { ...
- 3-11 group操作拓展
In [1]: import pandas as pd import numpy as np df=pd.DataFrame({'A':['foo','bar','foo','bar', 'foo', ...
- mongo db 去除 _class 字段
import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.NoSuc ...
- 跑批 - Spring Batch 批处理使用记录
根据spring官网文档提供的spring batch的demo进行小的测验 启动类与原springboot启动类无异 package com.example.batchprocessing; imp ...
- appium--uiautomatorviewer的使用
uiautomatorviewer的使用 uiautomatorviewer也是获取页面元素属性的工具,相比之前介绍的appium desktop来说,方便了很多,appium desktop需要从启 ...