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:637. 二叉树的层平均值
Leetcode:637. 二叉树的层平均值 Leetcode:637. 二叉树的层平均值 Talk is cheap . Show me the code . /** * Definition fo ...
- DNS Bind日志详述
简介 在默认情况下,BIND9 把日志消息写到 /var/log/messages 文件中,而这些日志消息是非常少的,主要就是启动,关闭的日志记录和一些严重错误的消息:而将调试日志信息写入 BIND ...
- PostgreSQL-WITH AS短语
WITH提供了一种方式来书写在一个大型查询中使用的辅助语句.这些语句通常被称为公共表表达式或CTE,它们可以被看成是定义只在一个查询中存在的临时表.在WITH子句中的每一个辅助语句可以是一个SELEC ...
- python 装饰函数2
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Tue May 5 21:40:49 2020 ...
- 解决pip下载速度慢的问题
解决链接:https://blog.csdn.net/u013901768/article/details/82343512 感谢这位博主的分享. 博客内容如下: 1. 安装时强制使用国内源进行安装, ...
- 学习笔记-CCS-MSP430F5529[快速入门篇二]
由于2021的全国电赛延期了,从今天开始打算好好整理一下使用CCS编程的经验,本篇笔记会好好整理一下我备赛期间用CCS写的程序,包括外部中断,定时器部分的定时中断,定时器输入捕获,PWM波输出,UAR ...
- (11)MySQL进阶篇SQL优化(InnoDB锁问题排查与解决)
1.概述 前面章节之所以介绍那么多锁的知识点和示例,其实最终目的就是为了排查与解决死锁的问题,下面我们把之前学过锁知识重温与补充一遍,然后再通过例子演示下如果排查与解决死锁. 2.前期准备 ●数据库事 ...
- Kubernetes安装报错总结
1.kubeadm init初使化报错 [root@k8s01 ~]# kubeadm init --kubernetes-version=v1.13.3 --pod-network-cidr=1 ...
- Docker小白到实战之开篇概述
前言 "不对啊,在我这运行很正常啊",这句话小伙伴们在前几年应该听得很多:每次一到安装.部署时总有一堆问题,毕竟操作系统版本.软件环境.硬件资源.网络等因素在作怪,此时难免会导致开 ...
- VScode安装配置
一.安装VScode 进入VScode官网Visual Studio Code下载 安装 二.设置中文 打开vscode 重启vscode 三.美化 四.安装拓展插件 Auto Close Tag ( ...