Stream学习笔记
1. 创建Stream实例的五种方式
@Test
public void test1(){
// 创建Stream对象的第一种方式
List<String> list = Lists.newArrayList("A", "B", "C");
Stream<String> stream1 = list.stream(); // 创建Stream对象的第二种方式
String[] arr = {"A", "B"};
Stream<String> stream2 = Arrays.stream(arr); // 创建Stream对象的第三种方式 Stream<String> stream3 = Stream.of("A", "B"); // 创建Stream对象的第四种方式
// iterate会无限执行,所以limit只取前5个
Stream<Integer> stream4 = Stream.iterate(0, x -> x * x).limit(5); // 创建Stream对象的第五种方式
// generate也会无限执行,所以limit只取前5个
Stream<Double> stream5 = Stream.generate(Math::random).limit(5);
}
2. Stream常用Api
@Test
public void test2() {
List<String> list = Lists.newArrayList("abc", "bcd", "efg", "a12", "bcd");
// 1.过滤
list.stream().filter(x -> x.contains("b")).forEach(System.out::println); // 2.取前n
list.stream().limit(1).forEach(System.out::println); //3. 跳过前n个
list.stream().skip(2).forEach(System.out::println); //4. distinct 去重
list.stream().distinct().forEach(System.out::println); //5. map映射
list.stream().map(x -> x.toUpperCase()).forEach(System.out::println); System.out.println("-----------------------");
//6. flatMap映射(与scala中的map,flatMap一样的),返回的是个Stream
list.stream().flatMap(x -> Stream.of(x.toUpperCase())).forEach(System.out::println); //7.排序 sorted() ---> 自然排序
List<Integer> list1 = Lists.newArrayList(12, 1, 0, -1, 2, 56, 34);
list1.stream().sorted().forEach(System.out::println); //8.排序 sorted(Comparator com) --> 按指定规则排序
list1.stream().sorted((e1, e2) -> -Integer.compare(e1, e2)).forEach(System.out::println); //9. 匹配与查找
// list中的所有元素都含有"a"
boolean ret = list.stream().allMatch(x -> x.contains("a"));
System.out.println(ret); // list只要有一个元素包含有"a",就true
ret = list.stream().anyMatch(x -> x.contains("a"));
System.out.println(ret); //list中没有以"A"开头的元素
ret = list.stream().noneMatch(x -> x.startsWith("A"));
System.out.println(ret); //第一个元素
Optional<String> first = list.stream().findFirst();
System.out.println(first.get()); //找任意一个元素
Optional<String> any = list.parallelStream().findAny();
System.out.println(any.get()); // 找最大值
Optional<Integer> max = list1.stream().max(Integer::compareTo);
// 上面这行代码是下面代码的简写
// Optional<Integer> max1 = list1.stream().max((e1, e2) -> Integer.compare(e1, e2));
System.out.println(max.get()); //10 , 归约
Optional<Integer> reduce = list1.stream().reduce((x, y) -> x + y); // list1中元素求和
System.out.println(reduce.get()); Integer sum = list1.stream().reduce(0, Integer::sum); // list1中元素求和
System.out.println(sum); Integer sum2 = list1.stream().reduce(10, Integer::sum); // 10 + list1中元素求和
System.out.println(sum2); //11. collect--> 将stream转成list集合
List<Integer> collect = list1.stream().map(x -> x * 2).collect(Collectors.toList());
collect.forEach(System.out::println); }
Stream学习笔记的更多相关文章
- c#Stream学习笔记
C# 温故而知新:Stream篇(—) http://www.cnblogs.com/JimmyZheng/archive/2012/03/17/2402814.html 基本概念重点看这一篇. 什么 ...
- java Stream学习笔记
1.Stream与io无关. 2.Stream和用普通的循环没有太大区别,甚至时间复杂度更高,代码可读性差(通常代码行数更少). 3.流操作就是把循环要做的任务单独抽取出来,最终通过编译在一起. 来看 ...
- PHP stream 学习笔记一(同步阻塞 IO 模型)
原文http://blog.csdn.net/shagoo/article/details/6396089 [root@localhost php]# vi server_one.php <?p ...
- JSP学习笔记
JSP学习笔记 Jsp网页主要分为Elements与Template Data两部分. Template Data:JSP Container不处理的部分,例如HTML内容 Elements:必须经由 ...
- RAC学习笔记
RAC学习笔记 ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的新框架,Cocoa是苹果整套框架的简称,因此很多苹果框架喜欢以Cocoa结尾. 在学习Re ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- spark学习笔记总结-spark入门资料精化
Spark学习笔记 Spark简介 spark 可以很容易和yarn结合,直接调用HDFS.Hbase上面的数据,和hadoop结合.配置很容易. spark发展迅猛,框架比hadoop更加灵活实用. ...
- Rest API 开发 学习笔记(转)
Rest API 开发 学习笔记 概述 REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表示方式.获得这些表徵致使这些应用程序转变了其状态.随着 ...
- Python核心编程第三版第二章学习笔记
第二章 网络编程 1.学习笔记 2.课后习题 答案是按照自己理解和查阅资料来的,不保证正确性.如由错误欢迎指出,谢谢 1. 套接字:A network socket is an endpoint of ...
随机推荐
- 使用debugger在程序中加入断点
使用debugger在程序中加入断点 版权声明:本文为博主原创文章,未经博主允许不得转载. 我们可以在程序中加入debugger语句,这样Firefox的调试工具会停留在这条语句上,代码也暂停执行,和 ...
- leetcode 238. 除自身以外数组的乘积 (python)
给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: [1 ...
- Delphi Canvas的FillRect(const Rect: TRect) 函数的作用
http://blog.163.com/zhangzhifeng688@126/blog/static/165262758201131211341460/ Delphi Canvas的FillRect ...
- 16/7/11_PHP-图形图像操作
GD库简介 GD指的是Graphic Device,PHP的GD库是用来处理图形的扩展库,通过GD库提供的一系列API,可以对图像进行处理或者直接生成新的图片. PHP除了能进行文本处理以外,通过GD ...
- 【BASIS系列】SAP 设置系统timeout时间
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[BASIS系列]SAP 设置系统timeout ...
- LeetCode 337. House Robber III 动态演示
每个节点是个房间,数值代表钱.小偷偷里面的钱,不能偷连续的房间,至少要隔一个.问最多能偷多少钱 TreeNode* cur mp[{cur, true}]表示以cur为根的树,最多能偷的钱 mp[{c ...
- 10 (H5*) js第10天 正则表达式、深浅拷贝
目录: 1:浅拷贝 2: 深拷贝 3:遍历DOM树 4:正则表达式 5:正则表达式的创建方式 6:字符串中的正则表达式 7:真数组和伪数组 8: escape()和unescapt() 编码和 解 ...
- Python 学习笔记15 类 - 继承
我们在编程的过程中,并非都是要重头开始.比如其他人已经有现成的类,我们可以使用其他找人编写的类.术语称之为: 继承. 当一个类继承例外一个类时,它可以获得这个类的所有属性和方法:原有的类称之为 父类, ...
- Java数组相关算法一
一.数组反转 1.方法一:创建新数组 int[] arr = {6,29,0,4,3}; int[] arr2 = new int[arr.length]; for (int i = 0; i < ...
- ubuntu下修改子网掩码
1.修改网络配置 修改 /etc/netplan/01-network-manager-all.yaml 文件 vi /etc/netplan/01-network-manager-all.yaml ...