过滤
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的使用的更多相关文章

  1. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...

  2. java之stream(jdk8)

    一.stream介绍 参考: Java 8 中的 Streams API 详解   Package java.util.stream   Java8初体验(二)Stream语法详解   二.例子 im ...

  3. 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 ...

  4. Java笔记:Java 流(Stream)、文件(File)和IO

    更新时间:2018-1-7 12:27:21 更多请查看在线文集:http://android.52fhy.com/java/index.html java.io 包几乎包含了所有操作输入.输出需要的 ...

  5. Java 8 Stream

    1.关于Java8部分新特性介绍 Java8的新特性很多,在此就不一一介绍了,这里只说一下我自己在工作用用得比较多的几点: 1.1.Lambda表达式 Lambda允许把函数作为一个方法的参数(函数作 ...

  6. [零]java8 函数式编程入门官方文档中文版 java.util.stream 中文版 流处理的相关概念

    前言 本文为java.util.stream 包文档的译文 极其个别部分可能为了更好理解,陈述略有改动,与原文几乎一致 原文可参考在线API文档 https://docs.oracle.com/jav ...

  7. java 11 Stream 加强

    Stream 是 Java 8 中的新特性,Java 9 开始对 Stream 增加了以下 4 个新方法. 1) 增加单个参数构造方法,可为null Stream.ofNullable(null).c ...

  8. Java 8 新特性-菜鸟教程 (5) -Java 8 Stream

    Java 8 Stream Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据. Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种 ...

  9. 关于java中Stream理解

    关于java中Stream理解 Stream是什么 Stream:Java 8新增的接口,Stream可以认为是一个高级版本的Iterator.它代表着数据流,流中的数据元素的数量可以是有限的, 也可 ...

  10. java.util.stream 库简介

    Java Stream简介 Java SE 8 中主要的新语言特性是拉姆达表达式.可以将拉姆达表达式想作一种匿名方法:像方法一样,拉姆达表达式具有带类型的参数.主体和返回类型.但真正的亮点不是拉姆达表 ...

随机推荐

  1. (Opencv4)二值化图像

    (Opencv4)二值化图像  ret, dst = cv2.threshold(src, thresh, maxval, type) threshold : 极限,临界值,阈值 ret: 一个数 s ...

  2. jvm源码解读--10 enum WKID 枚举

    源码中对于枚举类型WKID的使用 static bool initialize_wk_klass(WKID id, int init_opt, TRAPS); static void initiali ...

  3. phpMyAdmin 4.0.x—4.6.2 远程代码执行漏洞(CVE-2016-5734)

    影响范围 4.0.10.16之前4.0.x版本 4.4.15.7之前4.4.x版本 4.6.3之前4.6.x版本(实际上由于该版本要求PHP5.5+,所以无法复现本漏洞) 需要登录,且能够写入数据 p ...

  4. 用QT写的简单Todo记事本-附源码(浮动窗口)

    去年边学边写了搞了很久, 已经好久没继续开发了, 先放出来供大家参考吧. 发现自己的学习能力还是不错的. 技术点: 使用QT, QML技术 代码参考: https://github.com/cnscu ...

  5. git分支merge冲突 error: you need to resolve your current index first

    问题: 执行切换代码分支 git checkout featrue_2019-06-24 ,报错如下: error: you need to resolve your current index fi ...

  6. Android程序员提加薪被拒,刷2000题跳槽涨薪50%!

    为什么想跳槽? 简单说一下当时的状况,我在这家公司做了两年多,这两年多完成了一个大项目,作为开发的核心主力,开发压力很大,特别是项目上线前的几个月是非常辛苦,几乎每晚都要加班到12点以后,周末最多只有 ...

  7. Docker部署Zookeeper部署实践(1)

    Zookeeper可提供的服务主要有:配置服务.名字服务.分布式同步.组服务等 1. 抓取Zookeeper镜像 命令:docker pull zookeeper 2. 将Zookeeper镜像保存为 ...

  8. Docker for windows安装与使用

    1.安装Docker for windows之前,需要将系统的hyper-v功能打开 2.下载Docker for windows进行安装 访问url:https://docs.docker.com/ ...

  9. Subversion Backup and Restore

    Backup Specified Revision Backup specified revision (here is 20): $ cd /opt/svnRepo $ svnadmin dump ...

  10. Golang语言系列-14-单元测试

    单元测试 字符串切割函数 package split_string import ( "fmt" "strings" ) // Split:切割字符串 // e ...