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
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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));//此时在使用之前的流会抛出异常 IllegalStateException
streamC.forEach(s -> System.out.println(s));// 输出结果 :李华
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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));
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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));
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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 + " "));//输出结果:赵六 田七 王八
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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流式思想(二)
如何获取Stream流刚开始写博客,有一些不到位的地方,还请各位论坛大佬见谅,谢谢! package cn.com.zq.demo01.Stream.test01.Stream; import org ...
- Java8新特性 Stream流式思想(一)
遍历及过滤集合中的元素使用传统方式遍历及过滤集合中的元素package cn.com.zq.demo01.Stream.test01.Stream; import java.util.ArrayLis ...
- Java8 新特性 —— Stream 流式编程
本文部分摘自 On Java 8 流概述 集合优化了对象的存储,大多数情况下,我们将对象存储在集合是为了处理他们.使用流可以帮助我们处理对象,无需迭代集合中的元素,即可直接提取和操作元素,并添加了很多 ...
- Java8 新特性之流式数据处理
一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现.比如我们希望对一个包含整数的 ...
- Java8 新特性之流式数据处理(转)
转自:https://www.cnblogs.com/shenlanzhizun/p/6027042.html 一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作 ...
- Java1.8新特性 - Stream流式算法
一. 流式处理简介 在我接触到java8流式数据处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现.比如我们希望对一个包 ...
- 这可能是史上最好的 Java8 新特性 Stream 流教程
本文翻译自 https://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/ 作者: @Winterbe 欢迎关注个人微信公众 ...
- Java8新特性Stream流应用示例
Java8新特性介绍 过滤集合 List<String> newList = list.stream().filter(item -> item != null).collect(C ...
- java8 新特性Stream流的应用
作为一个合格的程序员,如何让代码更简洁明了,提升编码速度尼. 今天跟着我一起来学习下java 8 stream 流的应用吧. 废话不多说,直入正题. 考虑以下业务场景,有四个人员信息,我们需要根据性 ...
随机推荐
- 从远程Linux Copy文件到本机 界面化操作
1.安装SSHSecureShellClient 2.打开 3.设置1,然后打开2就可以操作了
- KMP算法在字符串中的应用
KMP算法是处理字符串匹配的一种高效算法 它首先用O(m)的时间对模板进行预处理,然后用O(n)的时间完成匹配.从渐进的意义上说,这样时间复杂度已经是最好的了,需要O(m+n)时间.对KMP的学习可以 ...
- 【AHOI 2005】 约数研究
[题目链接] 点击打开链接 [算法] 要求M,显然可以通过约数个数定理从1..N暴力计算答案,然而n最大10^6,这个算法的时间复杂度是 O(N * sqrt(N))的,不能通过此题 因此我们换一种思 ...
- linux 忘记root(这里以centos 6.5为例)密码的解决办法
在使用linux的过程中有时候会忘记root用户的密码(尤其是进行交接而文档内容不全的时候),这个时候我们就可以进入单用户模式来重置root用户密码.下面来讲解重置root密码的方式,也可以说是破解r ...
- bzoj1756
1756: Vijos1083 小白逛公园 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1150 Solved: 371[Submit][Statu ...
- 【190】修改 PowerShell & CMD 显示字体
方法一:Windows7更改替换cmd(powershell)字体完全方法教程 说明:该方法将字体修改成只能显示英文,对于某些中文会乱码!(chcp 850) 方法二:添加中文字体(chcp 936) ...
- Bootstrap 垂直(默认)表单
在建立asp.net mvc视图中,默认的表单是垂直表单,与vs 自动创建的T4模板是水平表单,相比较,没有了<div class="form-horizontal"> ...
- JNI编程(一) —— 编写一个最简单的JNI程序(转载)
转自:http://chnic.iteye.com/blog/198745 忙了好一段时间,总算得了几天的空闲.貌似很久没更新blog了,实在罪过.其实之前一直想把JNI的相关东西整理一下的,就从今天 ...
- Python机器学习算法 — 朴素贝叶斯算法(Naive Bayes)
朴素贝叶斯算法 -- 简介 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法.最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Baye ...
- 在Visual studio 中解除 TFS 的账号绑定
在Visual Studio中, 只要使用了TFS, 就会要求输入用户名密码验证 . 但是一旦点击验证对话框下部的:记住用户名密码 以后都不能再修改用户名了. 而且重装Visual Studio 听说 ...