过滤
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. 使用xampp在本地环境配置虚拟域名

    最近在学习ThinkPHP5.1.手册里面提到"实际部署中,应该是绑定域名访问到public目录,确保其它目录不在WEB目录下面."所以把使用xampp在本地配置虚拟域名的过程记录 ...

  2. Spring自动装配(二)

    为什么Spring要支持Autowire(自动装配) 先写几个类,首先定义一个Animal接口表示动物: 1 public interface Animal { 2 3 public void eat ...

  3. 第二篇 -- SpringBoot入门Helloworld

    之前讲Jmeter接口的时候讲过社区版怎么创建web接口,那么现在用企业版创建一个Springboot项目.企业版自带Springboot,新建起来更加简单. 第一步:新建一个项目 第二步:选择Spr ...

  4. 在Python中执行普通除法

    如果希望Python只执行普通的除法,那么可以在程序前加上以下语句: 1 from _future_ import division 如果通过命令行(比如在Linux系统上)运行Python,可以使用 ...

  5. Java 异步编程的几种方式

    前言 异步编程是让程序并发运行的一种手段.它允许多个事情同时发生,当程序调用需要长时间运行的方法时,它不会阻塞当前的执行流程,程序可以继续运行,当方法执行完成时通知给主线程根据需要获取其执行结果或者失 ...

  6. JMX远程连接JVM

    -Dcom.sun.management.jmxremote :允许使用JMX远程管理 -Dcom.sun.management.jmxremote.port=9999 :JMX远程连接端口 -Dco ...

  7. 3分钟搭建一个网站?腾讯云Serverless开发体验

    作为一个开发者,应该都能理解一个网站从开发到上线,要经过很多繁琐的步骤. 编写代码,部署应用,部署数据库,申请域名,申请SSL证书,域名备案,到最终上线起码要几天时间. 作为一个不精通代码的业务玩家, ...

  8. 复杂多变场景下的Groovy脚本引擎实战

    一.前言 因为之前在项目中使用了Groovy对业务能力进行一些扩展,效果比较好,所以简单记录分享一下,这里你可以了解: 为什么选用Groovy作为脚本引擎 了解Groovy的基本原理和Java如何集成 ...

  9. pycharm配置selenium碰到的问题

    Inherit global site-packages: 导入本地包 Make available to all projects : 使所有项目都可用 chromedriver的版本一定要与Chr ...

  10. let 及const

    ES5中的块级作用域 ES5中只有全局作用域和函数作用域,这样带来了很多的不便利,会出现内层变量被外层变量覆盖,循环体中的变量会暴露在全局,很多情况下需要自执行函数来私有化变量. ES6块级的作用域 ...