java的stream的使用
过滤
filter;
//匹配第一个元素
Optional<Integer> findFirst=list.stream().filter(x->x>6).findFirst();
//任意匹配 (适用于并行流)
List<String> collect = personList.stream().filter(x -> x.getSalary() > 8000).map(Person::getName).collect(Collectors.toList()); //任意匹配 (适用于并行流)
Optional<Integer> findAny=list.parallelStream().filter(x->x>6).findAny(); 是否匹配:
anyMatch:
// 是否包含符合特定条件的元素
boolean anyMatch=list.stream().anyMatch(x->x>6); 映射
map:
// 案例二:将员工的薪资全部增加1000。
List<Person> personListNew = personList.stream().map(person -> {
// 不改变原来员工集合的方式
Person person1 = new Person(person.getName(), 0, null, 0, null);
person1.setSalary(person.getSalary() + 1000);
return person1;
}).collect(Collectors.toList()); List<Person> collect3 = personList.stream().map(person -> {
// 改变原来员工集合的方式
person.setSalary(person.getSalary() + 1000);
return person;
}).collect(Collectors.toList()); //变成大写
String[] strArr = { "abcd", "bcdd", "defde", "fTr" };
List<String> collect1 = Arrays.stream(strArr).map(String::toUpperCase).collect(Collectors.toList()); // map分为两组
// flatMap分为两一组
//.map获取两个班级所有的男生的集合
List<List<Person>> boyLists = gradeManageList.stream() //返回一个list 的List<Person>
.map(classManageMap -> classManageMap.get("男生"))
.collect(Collectors.toList()); //.flatMap获取两个班级所有男生的集合,返回一个List<Person>
List<Person> boyList = gradeManageList.stream() //返回Person 的list
.flatMap(classManageMap -> classManageMap.get("男生").stream())
.collect(Collectors.toList()); // 案例三:将两个字符数组合并成一个新的字符数组。
List<String> list7 = Arrays.asList("m,k,l,a", "1,3,5,7");
List<String> collect4 = list7.stream().flatMap(s -> {
//把每个元素转化成一个stream
String[] split = s.split(",");
Stream<String> s2 = Arrays.stream(split);
return s2;
}).collect(Collectors.toList()); 最大
max:
Optional<Person> max2 = personList.stream().max(Comparator.comparing(Person::getSalary));
// System.out.println(max2.get());
// 3.3 聚合(max/min/count)
List<String> strings = Arrays.asList("adnm", "admmt", "pot", "xbangd", "weoujgsd");
Optional<String> max = strings.stream().max(Comparator.comparing(String::length));
// System.out.println("最长的字符串:" + max.get());
Optional<Person> max1 = personList.stream().max(Comparator.comparing(Person::getAge));
// System.out.println("最大年龄"+max1.get()); //自然排序
Optional<Integer> max3=list3.stream().max(Integer::compareTo); //自定义排序
Optional<Integer> max4 = list3.stream().max(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
}); 归纳
reduce:
// 求工资之和方式1:
Optional<Integer> reduce1 = personList.stream().map(Person::getSalary).reduce(Integer::sum);
// 求工资之和方式2:
Integer reduce = personList.stream().reduce(0, (sum, p) -> sum += p.getSalary(), (sum1, sum2) -> sum1 + sum2);
// 求工资之和方式3:
Integer reduce3 = personList.stream().reduce(0, (sum, p) -> sum += p.getSalary(), Integer::sum); // 求最高工资方式1:
Integer reduce2 = personList.stream().reduce(0, (max, p) -> max > p.getSalary() ? max : p.getSalary(), Integer::max);
Integer maxSalary2 = personList.stream().reduce(0, (max, p) -> max > p.getSalary() ? max : p.getSalary(),
(max1, max3) -> max1 > max3 ? max1 : max3); List<Integer> list8 = Arrays.asList(1, 3, 2, 8, 11, 4);
// 求和
Optional<Integer> sum1=list8.stream().reduce((x,y)-> x + y);
Optional<Integer> sum2=list8.stream().reduce(Integer::sum);
Integer sum3= list8.stream().reduce(0, Integer::sum); // 求乘积
Optional<Integer> sum4=list8.stream().reduce((x,y)-> x * y); // 求最大值方式
Optional<Integer> max6=list8.stream().reduce((x,y)-> x > y?x:y);
Integer max5=list8.stream().reduce(1,Integer::max); Map<String, Person> collect7 = personList0.stream().filter(p -> p.getSalary() > 8000).collect(Collectors.toMap(Person::getName, p -> p)); //统计员工人数
Long collect6 = personList0.stream().collect(Collectors.counting());
//平均工资
Double collect8 = personList0.stream().collect(Collectors.averagingDouble(Person::getSalary));
// 求最高工资
Optional<Integer> collect9 = personList0.stream().map(Person::getSalary).collect(Collectors.maxBy(Integer::compare)); // 求工资之和
Double collect10 = personList0.stream().collect(Collectors.summingDouble(Person::getSalary)); //以上总计数量,最大,最小,平均
DoubleSummaryStatistics collect0 = personList0.stream().collect(Collectors.summarizingDouble(Person::getSalary)); 接合(joining):
String collect14 = personList0.stream().map(p -> p.getName()).collect(Collectors.joining(","));
// System.out.println("所有员工的姓名:" + collect14); sorted:
// sorted,中间操作。有两种排序:
// sorted():自然排序,流中元素需实现Comparable接口
// sorted(Comparator com):Comparator排序器自定义排序
// 按工资升序排序(自然排序) //按照工资升序的人的姓名排序
List<String> collect16 = personList0.stream().sorted(Comparator.comparing(Person::getSalary)).map(Person::getName).collect(Collectors.toList()); // 先按工资再按年龄升序排序
List<String> collect17 = personList0.stream().sorted(
Comparator.comparing(Person::getSalary).thenComparing(Person::getAge)
).map(Person::getName).collect(Collectors.toList()); concat
distinct: String[] arr1 = { "a", "b", "c", "d" };
String[] arr2 = { "d", "e", "f", "g","a"};
Stream<String> arr11 = Stream.of(arr1);
Stream<String> arr22= Stream.of(arr2);
// concat:合并两个流 distinct:去重
List<String> distinct = Stream.concat(arr11, arr22).distinct().collect(Collectors.toList());
// limit:限制从流中获得前n个数据
List<Integer> collect19 = Stream.iterate(1, x -> x + 2).limit(10).collect(Collectors.toList());
// skip:跳过前n个数据
List<Integer> collect20 = Stream.iterate(1, x -> x + 2).skip(1).limit(5).collect(Collectors.toList());
java的stream的使用的更多相关文章
- Java 8 Stream API详解--转
原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...
- java之stream(jdk8)
一.stream介绍 参考: Java 8 中的 Streams API 详解 Package java.util.stream Java8初体验(二)Stream语法详解 二.例子 im ...
- Java 8 Stream API Example Tutorial
Stream API Overview Before we look into Java 8 Stream API Examples, let’s see why it was required. S ...
- Java笔记:Java 流(Stream)、文件(File)和IO
更新时间:2018-1-7 12:27:21 更多请查看在线文集:http://android.52fhy.com/java/index.html java.io 包几乎包含了所有操作输入.输出需要的 ...
- Java 8 Stream
1.关于Java8部分新特性介绍 Java8的新特性很多,在此就不一一介绍了,这里只说一下我自己在工作用用得比较多的几点: 1.1.Lambda表达式 Lambda允许把函数作为一个方法的参数(函数作 ...
- [零]java8 函数式编程入门官方文档中文版 java.util.stream 中文版 流处理的相关概念
前言 本文为java.util.stream 包文档的译文 极其个别部分可能为了更好理解,陈述略有改动,与原文几乎一致 原文可参考在线API文档 https://docs.oracle.com/jav ...
- java 11 Stream 加强
Stream 是 Java 8 中的新特性,Java 9 开始对 Stream 增加了以下 4 个新方法. 1) 增加单个参数构造方法,可为null Stream.ofNullable(null).c ...
- Java 8 新特性-菜鸟教程 (5) -Java 8 Stream
Java 8 Stream Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据. Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种 ...
- 关于java中Stream理解
关于java中Stream理解 Stream是什么 Stream:Java 8新增的接口,Stream可以认为是一个高级版本的Iterator.它代表着数据流,流中的数据元素的数量可以是有限的, 也可 ...
- java.util.stream 库简介
Java Stream简介 Java SE 8 中主要的新语言特性是拉姆达表达式.可以将拉姆达表达式想作一种匿名方法:像方法一样,拉姆达表达式具有带类型的参数.主体和返回类型.但真正的亮点不是拉姆达表 ...
随机推荐
- Leetcode春季打卡第四天:994. 腐烂的橘子
Leetcode春季打卡第四天:994. 腐烂的橘子 Leetcode春季打卡第四天:994. 腐烂的橘子 思路 思路是采用广度优先搜索,一层一层遍历. 首先先扫描矩阵,将坏橘子放进队列,记录正常橘子 ...
- SpringBoot之了解自动配置原理
承接上文: import注解的使用: 作用:引用时,容器自动创建出这填写的类型的组件,默认组件的名字就是全类名. 往容器中添加两个组件 @Import({User.class, DBHelper.cl ...
- 如何掌握C#的核心技术
如何掌握C#的核心技术 感谢网友毛大神制作的图. 引子 前不久看到一个段子,某年宁波交警引进人脸识别技术抓拍行人闯红灯,结果一天下来被发现闯红灯次数最多的是珠海女子董小姐,日闯红灯3000多次.宁波交 ...
- 【Uva1025 A Spy in the Metro】动态规划
题目描述 某城市地铁是线性的,有n(2≤n≤50)个车站,从左到右编号1~n.有M1辆列车从第1站开始往右开,还有M2辆列车从第n站开始往左开.列车在相邻站台间所需的运行时间是固定的,因为所有列车的运 ...
- Socket介绍(五)
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信.网络套接 ...
- C++第四十三篇 -- VS2017创建控制台程序勾选MFC类库
用VS2017创建EXE带MFC类库方法 1. File --> New --> Project 2. Windows桌面向导 3. 勾选MFC类库 4. 创建成功 如果项目编译出错 1. ...
- jvm源码解读--04 常量池 常量项的解析CONSTANT_Class_info
接上篇的继续 ConstantPool* constant_pool = ConstantPool::allocate(_loader_data, length, CHECK_(nullHandle) ...
- windows环境30分钟从0开始快速搭建第一个docker项目(带数据库交互)
前言 小白直接上手 docker 构建我们的第一个项目,简单粗暴,后续各种概念边写边了解,各种概念性的内容就不展开,没了解过的点击 Docker 教程 进行初步了解. Docker 是一个开源的应用 ...
- DC-3靶机
仅供个人娱乐 靶机信息 下载地址:http://www.five86.com/downloads/DC-3.zip 一.主机扫描 arp-scan -l nmap -A -p 1-65535 -sV ...
- 大数据学习(03)——HDFS的高可用
高可用架构图 先上一张搜索来的图. 如上图,HDFS的高可用其实就是NameNode的高可用. 上一篇里,SecondaryNameNode是NameNode单节点部署才会有的角色,它只帮助NameN ...