直接贴代码:

package com.c8a.stream;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.junit.Test;import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;/*** @Author C8A* @Date 2021-11-22 13:56* @Email 1912327276@qq.com*/public class StreamAPI {@Data@AllArgsConstructor@NoArgsConstructorstatic class Employee {private Integer id;private String name;private Integer age;private Double salary;}//生成数据public static List<Employee> empList() {List<Employee> employeeList = new ArrayList<Employee>();employeeList.add(new Employee(1001, "逍遥子", 32, 1000.00));employeeList.add(new Employee(1002, "杰克马", 34, 3453.00));employeeList.add(new Employee(1003, "张三", 32, 5675.34));employeeList.add(new Employee(1004, "李四", 67, 12300.00));employeeList.add(new Employee(1005, "王五", 52, 104230.00));employeeList.add(new Employee(1006, "赵六", 45, 342300.00));return employeeList;}//通过集合@Testpublic void Test1() {List<Employee> employeeList = empList();//顺序流Stream<Employee> stream = employeeList.stream();stream.forEach(System.out::println);//并行流Stream<Employee> employeeStream = employeeList.parallelStream();employeeStream.forEach(System.out::println);}//通过数组@Testpublic void Test2() {int[] arr = new int[]{1, 2, 3, 4, 5, 6, 7};IntStream stream = Arrays.stream(arr);}//通过Stream的of@Testpublic void Test3() {Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5, 6);}//创建无限流@Testpublic void Test4() {//        Stream.iterate(0, t -> t + 2).limit(10).forEach(System.out::println);Stream.generate(Math::random).limit(10).forEach(System.out::println);}//筛选与切片@Testpublic void Test5() {//filterList<Employee> employeeList = empList();
//        employeeList.stream().filter(employee -> employee.getSalary()>1250.00).forEach(System.out::println);//limit
//        employeeList.stream().filter(employee -> employee.getSalary()>1250.00).limit(2).forEach(System.out::println);//skip
//        employeeList.stream().filter(employee -> employee.getSalary()>1250.00).skip(2).forEach(System.out::println);//distinctemployeeList.add(new Employee(105, "张三5", 35, 1500.0));employeeList.stream().filter(employee -> employee.getSalary() > 1250.00).distinct().forEach(System.out::println);System.out.println(employeeList);}//映射@Testpublic void Test6() {//map(Function f)System.out.println("***************************************map(Function f)");List<String> stringList = Arrays.asList("aa", "bb", "cc", "dd", "ee", "ff");stringList.stream().map(s -> s.toUpperCase()).forEach(System.out::println);//练习1System.out.println("***************************************练习1");empList().stream().map(Employee::getName).filter(name -> name.length() > 2).forEach(System.out::println);//练习2System.out.println("***************************************练习2");Stream<Stream<Character>> streamStream = stringList.stream().map(StreamAPI::fromStringToStream);streamStream.forEach(s -> {s.forEach(System.out::println);});//flatMap(Function f) 练习2简化版System.out.println("***************************************练习2简化版");stringList.stream().flatMap(StreamAPI::fromStringToStream).forEach(System.out::println);//mapToDouble(ToDoubleFunction f)System.out.println("***************************************mapToDouble");List<Integer> integerList = Arrays.asList(1, 2, 3, 4, 5, 6, 7);integerList.stream().mapToDouble(i -> i * 2).forEach(System.out::println);//mapToInt( ToIntFunction f)System.out.println("***************************************mapToInt");List<Double> doubleList = Arrays.asList(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0);doubleList.stream().mapToDouble(d -> d + 1).forEach(System.out::println);//mapToLong(ToLongFunction f)System.out.println("***************************************mapToLong");List<Integer> intList = Arrays.asList(1, 2, 3, 4, 5, 6, 7);intList.stream().mapToLong(l -> l + 100).forEach(System.out::println);}//将字符事中的多个字符构成的集合转换为对应的Stream的实例public static Stream<Character> fromStringToStream(String str) {ArrayList<Character> list = new ArrayList<>();for (Character c : str.toCharArray()) {list.add(c);}return list.stream();}//排序@Testpublic void Test7() {//sorted()System.out.println("******sorted()******");List<Integer> integerList = Arrays.asList(324, 4545, 2342, 56, 23, 454, 6761, 45634, 123, 657, 6789);integerList.stream().sorted().forEach(System.out::println);//sorted(Comparator com)System.out.println("******sorted(Comparator com)******");empList().stream().sorted((e1, e2) -> {//先比较年龄int compare = Integer.compare(e1.getAge(), e2.getAge());if (compare != 0) {return compare;} else {//如果相同再比较薪水return Double.compare(e1.getSalary(), e2.getSalary());}}).forEach(System.out::println);}//终止操作@Testpublic void Test8() {List<Employee> employeeList = empList();//allMatch(Predicate p) 检查是否匹配所有元素。System.out.println("******allMatch(Predicate p)******");boolean b = employeeList.stream().allMatch(employee -> employee.getAge() > 33);System.out.println(b);//anyMatch(Predicate p) 检查是否至少匹配一个元素。System.out.println("******anyMatch(Predicate p)******");boolean bb = employeeList.stream().anyMatch(employee -> employee.getAge() > 33);System.out.println(bb);//noneMatch(Predicate p) 检查是否没有匹配的元素。System.out.println("******noneMatch(Predicate p)******");boolean bbb = employeeList.stream().anyMatch(employee -> employee.getAge() > 33);System.out.println(bbb);//findFirst() 返回第一个元素System.out.println("******findFirst()******");Optional<Employee> first = employeeList.stream().findFirst();System.out.println(first);//findAny() 返回当前流中的任意元素System.out.println("******findAny()******");Optional<Employee> any = employeeList.parallelStream().findAny();System.out.println(any);//count 返回流中元素的总个数System.out.println("******count()******");long count = employeeList.parallelStream().count();System.out.println(count);//max(Comparator c) 返回流中最大值System.out.println("******max(Comparator c)******");Optional<Double> max = employeeList.stream().map(Employee::getSalary).max(Double::compare);System.out.println(max);//min(Comparator c) 返回流中最小值System.out.println("******min(Comparator c)******");Optional<Employee> min = employeeList.stream().min(Comparator.comparingDouble(Employee::getSalary));System.out.println(min);//forEach(Consumer c) 返回流中最小值System.out.println("******forEach(Consumer c)******");employeeList.forEach(System.out::println);}//规约@Testpublic void Test9() {//reduce(T iden,BinaryOperator b)//练习1:计拿1-10的自然数的和System.out.println("******计拿1-10的自然数的和******");List<Integer> integerList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);Integer reduce = integerList.stream().reduce(0, Integer::sum);System.out.println(reduce);//计算公司工资总和System.out.println("******计算公司工资总和******");Optional<Double> reduce2 = empList().stream().map(Employee::getSalary).reduce(Double::sum);System.out.println(reduce2);//reduce(BinaryOperator b)}//收集@Testpublic void Test10() {//collect(Collector c)//toList()System.out.println("******toList******");empList().stream().filter(e -> e.getSalary() > 6000.00).collect(Collectors.toList()).forEach(System.out::println);//toSet()System.out.println("******toSet******");empList().stream().filter(e -> e.getSalary() > 6000.00).collect(Collectors.toSet()).forEach(System.out::println);}}

java8新特性-Stream流相关推荐

  1. Java8新特性Stream流详解

    陈老老老板 说明:新的专栏,本专栏专门讲Java8新特性,把平时遇到的问题与Java8的写法进行总结,需要注意的地方都标红了,一起加油. 本文是介绍Java8新特性Stream流常用方法超详细教学 说 ...

  2. java8新特性stream流

    参考自深蓝至尊的Java8 新特性之流式数据处理 一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式 ...

  3. Java8新特性——Stream流:不同于IO流的流,操作集合数据

    文章目录 Stream流 1.认识Stream流(源码说明) 1.1.Stream流和Collection的区别 1.2.流的获取方式 1.3.流操作和管道 1.4.并行性 1.5.不干扰内政 1.6 ...

  4. 【Stream】java8新特性Stream流总结

    一.什么是stream 在 java8 中增加了一个新的抽象接口 Stream API,使用 Stream 操作集合类似于使用 SQL 语句数据库查找数据类似,提供直观的方法进行操作. Stream ...

  5. java8新特性 Stream流的优雅操作

    1. 使用传统的方式,遍历集合,对集合中的数据进行过滤 //创建一个List集合,存储姓名List<String> list = new ArrayList<>();list. ...

  6. Java8新特性stream流的优雅操作

    文章目录 原因是因为我管理的小组提交代码被我review到了,发现只有个别同学使用到了stream流,所以出此blog,希望大家都写出优雅的代码 原因是因为我管理的小组提交代码被我review到了,发 ...

  7. 利用Java8新特性stream流给集合中的某个属性赋值

    今天在编写一个返回对象VO时,需要做一些处理,返回对象VO如下: CollectListVO @Data @JsonIgnoreProperties(ignoreUnknown = true) @Ap ...

  8. Java8新特性 Stream流常用方法

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

  9. Java8新特性 stream流常用方法

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

最新文章

  1. 青源 LIVE 预告 | McGill李岳Mila唐建团队新作:可迁移、可解释的单细胞RNA测序模型...
  2. 算法---------数组-----------翻转单链表
  3. Ambari Metrics Monitor/Sink 架构
  4. 面向对象编程(OOP)和面向过程编程
  5. python源码精要(8)-CPython源代码结构
  6. Windows Server 2008 的十四大最新功能特性技术总结
  7. 【机器学习】数据挖掘算法——关联规则(三),FP-growth算法
  8. jMeter创建微软Azure Lambda Function报错
  9. P3846-[TJOI2007]可爱的质数【BSGS,数论】
  10. 制作alipay-sdk-java包到本地仓库
  11. aspx转发php_asp,php,aspx一句话合集
  12. Python之HTML的解析(网页抓取一)
  13. android用单元测试的多,AndroidStudio中对Android应用进行单元测试InstrumentationTestCase...
  14. 扫雷游戏网页版_两个在线版复古小游戏,嗯还是熟悉的味道!
  15. 英寸和厘米之间的转换
  16. 新型电话诈骗手法“明天到我办公室来一下”全揭秘
  17. 【转】如何使html5语义化标签兼容ie
  18. Matlab2019b中配置最小均方误差滤波器(dsp.LMSFilter)详细设置
  19. Speedoffice(word)如何调整页眉位置
  20. ajax换头像,ajax切换明星头像!

热门文章

  1. python运行异常UserWarning:Could not import the lzma module .Your installed Python is incomplet
  2. 雅虎出售仍有吸引力 日本软银和阿里皆有兴趣
  3. Pomotroid 使用指南:一款高颜值 PC 端番茄时钟
  4. 移动App多渠道推广统计
  5. 程序员买房前后对比,看完后已哭瞎...
  6. 百家争鸣:2019大数据预测
  7. java容器类 joshua bloch_java-Builder(Joshua Bloch风格)用于抽象类的具体实现?
  8. Python程序来计算球体的体积和面积
  9. 怎么停用计算机的密码怎么办,抓狂啊~~iPhone忘记密码,已停用怎么办!
  10. 实习总结(一)——Python学习