Java8新特性 Stream流式思想(三)
Stream接口中的常用方法
刚刚开始写博客,有一些不到位的地方还请各位论坛大佬多多指点,谢谢!
- forEach()方法
package cn.com.cqucc.demo02.StreamMethods.Test02.StreamMethods;import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;/** forEach方法练习* void forEach(Consumer<? super T> action) 对此流的每个元素执行操作。* 参数 :* Consumer 是一个函数式接口,会将每一个流元素交给该函数去处理;* 它是一个消费型函数式接口,由于是一个函数是接口,所以可以使用Lambda表达式。* 作用:* 遍历数据。* 注意:* 它是一个终结方法,使用之后就不能再使用Stream流中的其他方法了,否则会抛出异常。* */
public class Test01StreamForeach {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("张三");list.add("李四");list.add("王五");list.add("赵六");list.add("田七");list.add("王八");
// 1、先将list转换为Stream流Stream<String> stream = list.stream();
// 2、使用Stream的forEach方法遍历集合stream.forEach(s -> System.out.print(s + " "));// 输出结果 :张三 李四 王五 赵六 田七 王八
// 3、如果在此使用该流会怎样?stream.filter(s -> s.startsWith("张"));
// 将抛出这个异常 : java.lang.IllegalStateException: stream has already been operated upon or closed}
}
- filter()方法
package cn.com.cqucc.demo02.StreamMethods.Test02.StreamMethods;import java.util.stream.Stream;/*
* Stream的filter()方法的使用
* Stream<T> filter(Predicate<? super T> predicate) 返回由与此给定谓词匹配的此流的元素组成的流。
* 参数 :
* 该方法的参数接收的是一个函数式接口,所以可以使用Lambda表达式
* 作用:进行元素的过滤
*
* Stream流的特点 :1、属于管道流 只能被消费(使用)一次2、第一个Stream 流调用完毕方法数据就会流转到下一个Stream流上 此时第一个 Stream 已经使用完毕就会关闭了此时第一个stream流就不能调用方法类了我们的stream流只能使用一次
* */
public class Test02StreamFilter {public static void main(String[] args) {
// 创建一个流Stream<String> streamA = Stream.of("张三", "李四", "王五", "赵六", "田七", "王八");
// 我只需要姓 “张”的 所以 调用 Stream流的方法 filter进行过滤streamA.filter(s -> s.startsWith("张")).forEach(s -> System.out.println(s));// 输出结果 :张三// 注意Stream<String> streamB = Stream.of("小明", "李华", "王二");Stream<String> streamC = streamB.filter(s -> s.startsWith("李"));
// streamB.forEach(s-> System.out.println(s));//此时在使用之前的流会抛出异常 IllegalStateExceptionstreamC.forEach(s -> System.out.println(s));// 输出结果 :李华}
}
- map()方法
package cn.com.cqucc.demo02.StreamMethods.Test02.StreamMethods;import java.util.stream.Stream;/** <R> Stream<R> map(Function<? super T,? extends R> mapper) 返回由给定函数应用于此流的元素的结果组成的流。* 参数 :* 一个 函数式接口 Function ,可以将函数中T类型的数据类型转换为R类型的流* 可以将一种类型转换为另一种类型,就叫映射。* 作用:* map 映射 : 如果需要将流中的元素映射到另一个流中 , 就使用map方法* */
public class Test03StreamMap {public static void main(String[] args) {
// 需求 : 将字符串类型的整数转换为 Integer类型的整数Stream<String> stringStream = Stream.of("1", "2", "1", "3");Stream<Integer> integerStream = stringStream.map(s -> Integer.parseInt(s));integerStream.forEach(s -> System.out.println(s));}
}
- count()方法
package cn.com.cqucc.demo02.StreamMethods.Test02.StreamMethods;import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;/** Stream流中的方法 long count() 返回此流中的元素数。** 作用:* 用于统计Stream流中元素的个数* 注意:* count方法是一个终结方法,使用完它之后就不能在使用 Stream流中的其他方法** */
public class Test04StreamCount {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("张三");list.add("李四");list.add("王五");list.add("赵六");list.add("田七");list.add("王八");Stream<String> streamList = list.stream();
// long count = streamList.count();long count = streamList.count();//调用它之后就不能再调用流中的其他方法了System.out.println(count);//6}
}
- limit()方法
package cn.com.cqucc.demo02.StreamMethods.Test02.StreamMethods;import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;/** Stream 方法中的 Stream<T> limit(long maxSize) 返回由此流的元素组成的流,截短长度不能超过 maxSize 。* 参数:* 参数是一个long类型的数据 如果 集合的长度大于 参数的长度 则进行截取 否则不进行任何操作* 作用:* limit方法可以对 流中的元素进行截取 只取前n个* */
public class Test06StreamLimit {public static void main(String[] args) {// 获取一个Stream流List<String> list = new ArrayList<>();list.add("张三");list.add("李四");list.add("王五");list.add("赵六");list.add("田七");Stream<String> stream = list.stream();
// 使用limit方法对stream流中的元素进行截取,只要前2个元素 并对流进行遍历stream.limit(2).forEach(s-> System.out.println(s));}
}
- skip()方法
package cn.com.cqucc.demo02.StreamMethods.Test02.StreamMethods;import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;/** Stream 方法中的 Stream<T> skip(long n) 在丢弃流的第一个 n元素后,返回由该流的剩余元素组成的流。* 参数 :* 是一个long类型的数据* 作用:* 如果希望跳过前n个元素就是用Stream的skip方法 获取一个截取之后的流* 如果流的当前长度大于n,则跳过前n个否则的到一个长度为0的流。* */
public class Test06StreamSkip {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("张三");list.add("赵四");list.add("王五");list.add("赵六");list.add("田七");list.add("王八");Stream<String> stream = list.stream();stream.skip(3).forEach(s -> System.out.print(s + " "));//输出结果:赵六 田七 王八}
}
- concat方法
package cn.com.cqucc.demo02.StreamMethods.Test02.StreamMethods;import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;/** Stream接口中的static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b)* 创建一个懒惰连接的流,其元素是第一个流的所有元素,后跟第二个流的所有元素。* 参数:* 两个流* 作用:* 如果你有两个流,你希望合并为一个流,那么就可以使用Stream流的静态方法concat* */
public class Test07StreamConcat {public static void main(String[] args) {List<String> listA = new ArrayList<>();listA.add("张三");listA.add("李四");listA.add("王五");listA.add("赵六");listA.add("田七");listA.add("王八");List<String> listB = new ArrayList<>();listB.add("小明");listB.add("张强");listB.add("李华");Stream<String> streamA = listA.stream();Stream<String> streamB = listB.stream();Stream<String> concatAB = Stream.concat(streamA, streamB);concatAB.forEach(s -> System.out.print(s + " "));//张三 李四 王五 赵六 田七 王八 小明 张强 李华}
}
Java8新特性 Stream流式思想(三)相关推荐
- java8新特性stream流
参考自深蓝至尊的Java8 新特性之流式数据处理 一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式 ...
- Java8新特性Stream流详解
陈老老老板 说明:新的专栏,本专栏专门讲Java8新特性,把平时遇到的问题与Java8的写法进行总结,需要注意的地方都标红了,一起加油. 本文是介绍Java8新特性Stream流常用方法超详细教学 说 ...
- Java8 新特性之流式数据处理(转)
转自:https://www.cnblogs.com/shenlanzhizun/p/6027042.html 一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作 ...
- Java8新特性——Stream流:不同于IO流的流,操作集合数据
文章目录 Stream流 1.认识Stream流(源码说明) 1.1.Stream流和Collection的区别 1.2.流的获取方式 1.3.流操作和管道 1.4.并行性 1.5.不干扰内政 1.6 ...
- 【Stream】java8新特性Stream流总结
一.什么是stream 在 java8 中增加了一个新的抽象接口 Stream API,使用 Stream 操作集合类似于使用 SQL 语句数据库查找数据类似,提供直观的方法进行操作. Stream ...
- Java8新特性 Stream流常用方法
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据. Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达 ...
- Java8新特性stream流的优雅操作
文章目录 原因是因为我管理的小组提交代码被我review到了,发现只有个别同学使用到了stream流,所以出此blog,希望大家都写出优雅的代码 原因是因为我管理的小组提交代码被我review到了,发 ...
- Java8新特性 stream流常用方法
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据. Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达 ...
- java8 新特性之流式数据处理_Java8新特性 - 集合流式编程 - 最终操作
2.数据源的获取 2.1.数据源的简介 数据源,顾名思义,既是流中的数据的来源.是集合的流式编程的第一步,将数据源中的数据读取到流中,进行处理.注意:将数据读取到流中进行处理的时候,与数据源中的数据没 ...
- java8新特性 Stream流的优雅操作
1. 使用传统的方式,遍历集合,对集合中的数据进行过滤 //创建一个List集合,存储姓名List<String> list = new ArrayList<>();list. ...
最新文章
- 华为交换机路由器常用命令
- 【Java8新特性】浅谈方法引用和构造器引用
- javascript 时钟代码 自动时间
- Windows客户机脱域问题及解决办法
- 我的Ubuntu9.10配置(随时更新)
- 【APICloud系列|3】开发APP对UI的一般性要求
- linux 提升cpu权限,CPUlimit有效防止Linux系统CPU过载
- 从SQL SERVER 2000到SQL SERVER 2005 视图中存在 ORDER BY 语句的完全解决方案
- 点到曲线的距离_如何从“圆锥”曲线到圆锥曲线
- 并发编程-Atomic的compareAndSet
- 用c语言实现strncmp,strncat,memset, memcmp
- [超详细] Apache网页优化:网页压缩与网页缓存超详细
- jetty 找不到html页面,记一次jetty 404问题排查修复
- 如何更改微信小程序二维码物料颜色
- 如何让计算机从固态硬盘启动不了,电脑设置固态硬盘启动的方法
- 你知道 DNS,那我猜你一定不知道 HTTPDNS
- excel提取工作表名称
- 短期趋势自用经传捕捞季节 通达信指标公式副图 源码 贴图
- 基于flowable的审批系统安装及部署
- 服务器开发- 牌和牌的基本操作
热门文章
- xman_2019_format(非栈上格式化字符串仅一次利用的爆破)
- PHP学习总结(二)
- C# wpf 自定义标题栏及无边框窗口
- Firefox的下载处理器:FlashGot v1.0 Final颁发
- viper4android资源分享,一步一步教你如何使4.42版本ROOT并且安装Viper4Android音效软件...
- 用Python做一只真·多足机器人,钢铁蜈蚣能弯曲还能蠕动
- 重言式判别 (数据结构课程设计)
- 普通人的第一个Linux发行版-安装Deepin20.5
- shell执行curl_Linux curl命令详解
- CURL 发送请求详解