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 用来创建文件在这之后输入任何东西 都是在 文件 ...
- Python笔记(十九)_继承
继承 继承可以把父类的所有功能都直接拿过来,这样就不必从零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写 多重继承 通过多重继承,一个子类就可以同时获得多个父类的所有功能 > ...
- 阅读笔记02-读懂HTTPS及其背后的加密原理
1 为什么需要https 使用https的原因其实很简单,就是因为http的不安全. 当我们往服务器发送比较隐私的数据(比如说你的银行卡,身份证)时,如果使用http进行通信.那么安全性将得不到保障. ...
- 【python】 判断纯ascii串
参考:http://stackoverflow.com/questions/3636928/test-if-a-python-string-is-printable print all(ord(c)& ...
- Git004--版本回退
Git--版本回退 本文来自于:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/ ...
- Show Me the Code
最近在练习写Python代码,拥有150多道程序员面试题的LeetCode注重算法的实现,锻炼思维,还能在线测试代码的正确性,而Python练习册涉及到了Python实际的应用,锻炼解决问题的能力,托 ...
- docker 一小时快速入门之利用docker安装Redis
利用docker方式快捷安装redis 该方式默认下载的最新版本镜像,如需要下载指定版本在redis后面跟:版本号 docker pull redis 查看当前下载redis的镜像 docker im ...
- TCP协议分析(包结构)---转
TCP首部格式 tcp数据是被封装在IP数据包中的,和udp类似,在IP数据包的数据部分.tcp数据包的格式如下: 源端口号和目的端口号(寻址)与udp中类似,用于寻找发端和收端应用进程.这两个值加上 ...
- C#面试 笔试题 六
1.String str=new String("a")和String str = "a"有什么区别? String str = "a"; ...
- JavaScript——实现继承的几种方式
实现继承的6中方法: 借用构造函数 组合继承 原型式继承 寄生式继承 寄生组合式继承 拷贝继承 1. 借用构造函数 在子类型构造函数的内部调用超类构造函数.通过使用apply()和call()方法在新 ...