华为java8_Java8 Stream

简单认识Java stream

Java8出了一个stream流式编程,在开发中或多或少用到接触过。怎么说呢!举个例子把,一起我们在遍历一个集合的时候,我们是从外部去遍历的,然后才能拿到结果,这样来效率就会变得相对低一点。而这个时候我们去内部去遍历集合的时候,直接从内部拿数据。减少资源消耗,提升效率。

什么是stream呢?

Stream它并不是一个容器,它只是对容器的功能进行了增强,添加了很多便利的操作,例如查找、过滤、分组、排序等一系列的操作。并且有串行、并行两种执行模式,并行模式充分的利用了多核处理器的优势,使用fork/join框架进行了任务拆分,同时提高了执行速度。简而言之,Stream就是提供了一种高效且易于使用的处理数据的方式。

首先我们来看下简单的一个执行流程

0d57f6ffd53ee7e5ce7ed77c7e71c87d.png

从这简单的图可以看出,总共就只有三步,相对来说还是比较容易接受。第一步是创建stream这个容器,然后再从这个集合或者数组中去获取这个流。第二步则是一些中间操作,比如对数据进行处理啊。第三步则就是手机我们处理的数据。

例:

public class Stream {

public static void main(String[] args) {

list();//传统for遍历

bigForList();//增强for遍历

iteratorList();//使用迭代器iterator遍历

}

private static void list(){

List list = new ArrayList<>();

list.add(1);

list.add(2);

list.add(3);

int i;

int size;

for (i=0,size=list.size(); i

Integer integer = list.get(i);

System.out.println(integer);

}

}

private static void bigForList(){

List arrlist = new ArrayList<>();

arrlist.add("张三");

arrlist.add("李四");

arrlist.add("王二");

for (String list :arrlist){

System.out.println(list);

}

}

private static void iteratorList(){

List list = new ArrayList<>();

list.add("hello");

list.add("demo");

list.add("test");

Iterator iterator = list.iterator();

while (iterator.hasNext()){

String s = iterator.next();

System.out.println(s);

}

}

以上就是我们我们之前常用的三种遍历方式,可能大家更加倾向于这三种,因为我们在平时开发中或者自己练习的时候。用的比较多,也就慢慢就接受了。但是如果数据量一大?大量数据进行遍历的时候那个这效率,就变得低起来了。所以,steam就出来了。首先我们看看code:

//look code

public static void main (String[] args){

List sList = Arrays.asList("zhangsan","heqing","lisi","...");

//创建顺序流

java.util.stream.Stream stream = sList.stream();

//创建并接流

java.util.stream.Stream stringStream = sList.parallelStream();

stream.forEach(System.out::println);

}

//Arrays.asList

//stream

//parallelStream

stream是顺序流,由主线程按顺序对流执行操作,而parallelStream是并行流,内部以多线程并行执行的方式对流进行操作,需要注意使用并行流的前提是流中的数据处理没有顺序要求(会乱序,即使用了forEachOrdered)。

当然我们也可以去创建一个顺序流

//look code

public static void main (String[] args){

List sList = Arrays.asList(1,2,3,4,5);

//把顺序流通过.parallel()转化为并行流

Optional findFirst = sList.stream().parallel().filter(x->x>5).findFirst();

//创建顺序流

java.util.stream.Stream stream = sList.stream();

//创建并接流

java.util.stream.Stream stringStream = sList.parallelStream();

stream.forEach(System.out::println);

}

在stream中提供了很多方法比如filter;

在以前我们要去一个集合或者数组中筛选我们想要的数据。还要进行一系列的操作,首先创建数组或者集合,然后遍历 然后判断,然后写逻辑等等。。。很麻烦

public static void main(String [] args){

List list= new ArrayList<>();

list.add();

....

for(){

....

....

...

逻辑代码等。。。。

}

}

但是如果用到了stream后就没不会有这么判断条件。切代码量小了,效率高了。谁又不想少写代码呢?早点下班不香吗?

废话不多说,look code;

public static void main(String[] args){

List list = Arrays.asList(1,2,3,4,5,52,46,48,0,12);

java.util.stream.Stream stream= list.stream();

//通过filter过滤去,获取list中大于12的数据

stream.filter(x -> x > 12).forEach(System.out::println);

}

//就三行代码完成,如果按照以前的写法,起码10行把!

还有映射 map、flatMap等

look code

map:一个元素类型为 T 的流转换成元素类型为 R 的流,这个方法传入一个Function的函数式接口,接收一个泛型T,返回泛型R,map函数的定义,返回的流,表示的泛型是R对象;

1

// Stream map(Function super T, ? extends R> mapper);

public static void main(String [] args) {

Stream.of("张三:20").map(s -> {

String[] str = s.split(":");

Person person = new Person(str[0],Integer.valueOf(str[1]));

return person;

}).forEach(Person -> System.out.println(Person));

}

flatMap:接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流。

look code

public static void main(String [] args) {

List list = Arrays.asList("k,l,s,x,z","1,5,2,4,8");

List newList = list.stream().flatMap(s -> {

String[] str = s.split(",");

Stream stream = Arrays.stream(str);

return stream;

}).collect(Collectors.toList());

System.out.println("处理前的集合"+list);

System.out.println("处理后的集合"+newList);

}

总之呢,stream给我们提供了非常大的帮助。只要能够熟练使用的话,确实能够加速开发效率。就会觉得原来写代码居然是那么好玩,easy啦。据说stream加lamda表达式写的代码简直就是像诗一样优美。不过我不知道什么是美。反正lamda用着挺不习惯的。

最后:各位看客老爷万福金安啊。一波三联可以吗?可以吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559665.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++ mysql 配置文件_C++操作数据库写入到json配置文件中

1. 这次加了对int和varchar的处理#include #include #include #include #include "json/json.h"#include #include using namespace std;int main(int argc, char* argv[]){MYSQL mysql;mysql_init( &mysql );mysql_real_connect(&mysql,"192.168.16.11…

求最长单调子序列java,单调减子序列(java实现)

题目&#xff1a;从一个由N个整数排列组成的整数序列中&#xff0c;自左向右不连续的选出一组整数&#xff0c;可以组成一个单调减小的子序列(如从{68 69 54 64 68 64 70 67 78 62 98 87}中我们可以选取出{69 68 64 62}这个子序列&#xff1b;当然&#xff0c;这里还有很多其他…

php输出12个月,php获取12个月内的开始时间和结束时间

$currentTime time();$cyear floor(date("Y",$currentTime));$cMonth floor(date("m",$currentTime));for($i0;$i<6;$i){$nMonth $cMonth-$i;$cyear $nMonth 0 ? ($cyear-1) : $cyear;$nMonth $nMonth < 0 ? 12$nMonth : $nMonth;$date $c…

java打开输入框,java – 在Android中打开输入对话框

我想在某个点打开一个输入对话框,我可以在其输入后存储和使用它.我在互联网上找到的所有例子都非常先进,我想它们并不像我想要的那样简单 – 我只需要类似于Java的东西&#xff1a;String name JOptionPane.showInputDialog("Enter your name");保留输入以供以后计算…

php 编译原理,编译原理

编译原理是计算机科学中历史最悠久&#xff0c;也是最高度发展的学科之一。编译器的设计与实现集中体现了计算机科学中的最核心的思想和技术&#xff0c;并且和计算机科学的其他研究领域&#xff0c;如形式语言与自动机、算法、数据结构、程序设计语言、计算机体系结构、软件工…

java俄文xml解析错误,XML解析出错处理

搜索热词正常解析完毕之后会直接走parserDidEndDocument这个方法解析出错之后会执行一个相应的方法&#xff0c;- (void)parser:(NSXMLParser*)parser parseErrorOccurred:(NSError*)parseError&#xff0c;执行完毕此方法后.会根据解析出错的地方去执行方法parserDidEndDocume…

JAVA中自己写的util中的chop,Java StringUtils.chop方法代碼示例

import org.apache.commons.lang3.StringUtils; //導入方法依賴的package包/類/*** Tutti i file dentro a /res vengono indicati come cacheabili lato browser per 1 anno (tramite lheader expires).* Per evitare che nuove versioni non vengano mai prese, si usa il &q…

ascii码扩展 php,php与ascii码

首先 简单说一下历史&#xff0c;ascii码最开始是美国人搞出来的&#xff0c;用来干什么呢&#xff1f;我们知道&#xff0c;计算机只知道0和1&#xff0c;如果我们要计算机识别除了01之外的字符&#xff0c;例如 a&#xff0c;我们要先告诉计算机‘1100001’就是a。跟摩斯密码…

php手机电子相册,免费电子相册制作软件 手机电子相册制作软件

照片配上音乐加上炫酷的过渡效果点缀图片和文字说明&#xff0c;轻松制作成各种视频格式的电子相册。不需要专业的视频制作知识&#xff0c;点几下鼠标就可以把上百张数码照片制作成电子相册。视频相册可以在电脑上用播放器收看或者在高清电视上播放。也可以刻录成DVD、VCD光盘…

windows上配置nginx php,Windows下配置Nginx使之支持PHP

1. 首先&#xff0c;将 nginx.conf 中的 PHP 配置注释去掉。01# pass the PHP scripts to FastCGI server listening on 127.0.0.1:900002#03#location ~ .php$ {04# root html;05# fastcgi_pass 127.0.0.1:9000;06# fastcgi_index index.php;07# fas…

php 系统环境变量引用,PHP 系统变量 环境变量

在PHP网站开发中&#xff0c;为了满足网站的需要&#xff0c;时常需要对PHP环境变量进行设置和应用&#xff0c;在虚拟主机环境下&#xff0c;有时我们更需要通过PHP环境变量操作函 数来对PHP环境变量值进行设置。为此我们有必要对PHP环境变量先有所熟悉。今天和大家分享PHP环境…

python dataframe分组求和,pandas datafram中按特定月份分组和求和值

这里有一个稍微不同的方法&#xff1a;使用year和month来构建索引&#xff0c;然后使用一个UDF groupby()。在示例数据&#xff1a;N 10years pd.date_range("1981", "2017", freq"A").yeardates np.random.choice(years, sizeN, replaceTrue…

matlab7.0 run,新手求救啊!!!matlab7.0在win7启动后命令窗口出现大段代码!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼java.lang.NoClassDefFoundError: com/mathworks/beans/ExtraPropertyAttributesat java.lang.ClassLoader.defineClass0(Native Method)at java.lang.ClassLoader.defineClass(Unknown Source)at java.security.SecureClassLoader…

php+spl+栈,PHP SPL标准库之数据结构栈(SplStack)介绍

栈(Stack)是一种特殊的线性表&#xff0c;因为它只能在线性表的一端进行插入或删除元素(即进栈和出栈)SplStack就是继承双链表(SplDoublyLinkedList)实现栈。类摘要如下&#xff1a;简单使用如下&#xff1a;//把栈想象成一个颠倒的数组$stack new SplStack();/*** 可见栈和双…

深度理解java jvm,深度理解JVM

深入理解java虚拟机要讲的内容了解历史垃圾回收机制性能监控工具性能调优案例实战认识类的文件结构类加载机制字节码执行引擎虚拟机编译及运行时优化Java线程高级1. 环境搭建安装jdk2. 内存溢出场景模拟public class Test01 {public static void main(String[] args) {//测试内…

php用json_encode编码后乱码,php json_encode()函数中文编码乱码解决方法_PHP教程

在我使用php json_encode()时&#xff0c;如果是英文或数字没一点问题&#xff0c;但是用到中文是居然出现不可识别的中文乱码了&#xff0c;下面看我解决json_encode中文乱码方法。在网上找到一种解决方法&#xff1a;代码如下复制代码后来请教了别人&#xff0c;还可以用base…

oracle 根据用户备份,Oracle基于用户的备份及恢复

要执行exp或imp命令&#xff0c;首先&#xff1a; 1.看Oracle安装目录的bin目录下有没有 exp.exe和 imp.exe这两个文件&#xff0c;要不然可能无法执行这个命令的要执行exp或imp命令&#xff0c;首先&#xff1a;1.看Oracle安装目录的bin目录下有没有 exp.exe和 imp.exe这两个文…

oracle数据库sql的执行过程,Oracle体系结构之SQL语句的执行过程

一般来说,数据库处理SQL都会经过三个过程:解析(parse)、执行(exec)、返回结果(fetch)1.解析当用户发起一个SQL语句时&#xff0c;Oracle通过Server Process 接收SQL语句到达oracle实例&#xff0c;并在Shared pool 中的 Library Cache 查找是否存在该语句对应执行计划的缓存。如…

otb100matlab,ECO for tracking 在 OTB100 基准测试和 VOT2016 数据集中的实验结果

目前本文所涉内容均未使用图形处理器。运行在有图形处理器环境下的实验将在稍后补充&#xff0c;敬请关注。需要准备的文章和工具有&#xff1a;一、集成 OTB1001.1 下载基准测试在该目录中可以看到&#xff1a;trackers 目录中已经包含了若干跟踪算法。而我们要做的就是把 ECO…

如何设置oracle_home变量,oracle-如何在Ubuntu 9.x上正确设置ORACLE_HOME变量?

oracle-如何在Ubuntu 9.x上正确设置ORACLE_HOME变量&#xff1f;我遇到了与此处列出的问题相同的问题&#xff1a;尽管我没有丢失密码&#xff0c;但如何恢复或更改Oracle sysdba密码&#xff0c;我最初在configure脚本中输入了两次&#xff0c;然后登录(localhost&#xff1a;…