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 中主要的新语言特性是拉姆达表达式.可以将拉姆达表达式想作一种匿名方法:像方法一样,拉姆达表达式具有带类型的参数.主体和返回类型.但真正的亮点不是拉姆达表 ...
随机推荐
- ZYNQ FLASH+EMMC手动移植LINUX启动
前言 虽可使用Petalinux进行移植,简单方便,但为了更清楚明白的了解整个流程,还是尝试了一波手动移植. 参考资料 ZYNQ Linux 移植:包含petalinux移植和手动移植debian9 ...
- P1447能量采集
P1447能量采集 定义:(i,j)表示处于(i,j)的植物的贡献 我们发现,点(i,j)与(0,0)的连线所过整点的数目为\(\gcd(i,j)\) 发现要是想记录每个点的答案并不好算.那么怎么好算 ...
- 第3天 IDEA 2021简单设置与优化 Java运算符 包机制
IDEA 2021简单设置与优化 将工具条显示在上方 View–>Appearance–>Toolbar 鼠标悬停显示 File–>setting–>Editor–>Ge ...
- Windows Server创建域控制器
推荐选择系统镜像为windows server2016(2019有诡异的bug不能安装域控.) 1.本地域安装设置 (1)连接到windows server2016 打开服务器管理器(Server M ...
- nacos Failed to obtain JDBC Connection 连接异常
在conf/目录下,将application.properties.example 改名为bootstrap.properties 将连接数据库信息添加到末尾 # db mysql spring.da ...
- 为什么 WordPress 镜像用起来顺手?
有用户朋友问,用已有WordPress镜像好?还是自己动手安装配置好? 答案:用Websoft9的相关镜像好(各大云市场的镜像提供商比较多,"真假李逵"的现象总是有的,我们只对We ...
- 我所学的c语言
c语言结构 #include <stdio.h> int main(){ /* 我的第一个 C 程序 */ printf("Hello, World! \n" ...
- HDFS中NameNode工作机制
引言 NameNode: 存储元数据 管理整个HDFS集群 DataNode: 存储数据的block SecondaryNameNode: 辅助HDFS完成一些事情 NameNode和Secondar ...
- React Class组件生命周期
一.react组件的两种定义方式 1.函数组件,简单的函数组件像下面这样,接收Props,渲染DOM,而不关注其他逻辑 function Welcome(props) { return <h1& ...
- Use Emacs as Personal Knowledge Base
http://stackoverflow.com/questions/2014636/how-to-maintain-an-emacs-based-knowledge-base