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 ...
随机推荐
- (转)cat > file << EOF 的用法
转:https://www.cnblogs.com/chenjingchao/p/6259572.html cat> 文件名<<eof 用来创建文件在这之后输入任何东西 都是在 文件 ...
- IBatis.Net 下使用SqlBulkCopy 大批量导入数据 问题解决
SQLBulkCopy是继承SQLClient空间下的一个特殊类,它可以帮助我们以映射的方式把DataTable和DataReader数据大批量导入到数据库对应表中 public void Inert ...
- 测开之路七十六:linux变量和环境变量
变量 赋值 variable=0,访问 $var或${var} 参数 $n 用``引住的会先执行(~键) 位置参数 环境变量/etc/profile:全局的环境变量 . bash_profile:用户 ...
- 定制化fiddler会话列表字段
前言:fiddler默认会话列表已有一些显示字段,可能并不是我们需要的,我们可以自行定制化. 以会话耗时为例: 目录 1.方法一:修改js脚本 2.方法二:通过菜单栏设置 1.方法一:修改js脚本 点 ...
- delphi之猥琐的webserver实现
http://www.birdol.com/cainiaobiancheng/238.html delphi之猥琐的webserver实现 菜鸟编程 十五楼的鸟儿 7年前 (2009-01-01) ...
- Comprehensive Guide to build a Recommendation Engine from scratch (in Python) / 从0开始搭建推荐系统
https://www.analyticsvidhya.com/blog/2018/06/comprehensive-guide-recommendation-engine-python/, 一篇详细 ...
- python之字符串的切片
切片操作(slice)可以从一个字符串中获取子字符串(字符串的一部分).我们使用一对方括号.起始偏移量start.终止偏移量end 以及可选的步长step 来定义一个分片. 格式: [start:en ...
- JsonView视图
同一个对象,在不同的场景,返回不同的属性,如getUserById返回User对象包含password值,而getAllUsers返回User集合,不包含password值(通过接口查看显示,序列化的 ...
- JAVA模拟Spring实现IoC过程(附源码)
前言:本人大四学生,第一次写博客,如果有写得不好的地方,请大家多多指正 一.IoC(Inversion of Control)反转控制 传统开发都是需要对象就new,但这样做有几个问题: 效率低下,创 ...
- dp或dfs(01背包问题)
链接:https://ac.nowcoder.com/acm/contest/993/C来源:牛客网题意:n头牛,给出它们的H高度,问这些牛的高度叠加起来大于等于书架高度,问叠加后的高度与书架的差值最 ...