一、基本API初探

  1. package java8.stream;
  2.  
  3. import java.util.Arrays;
  4. import java.util.IntSummaryStatistics;
  5. import java.util.List;
  6. import java.util.Random;
  7. import java.util.stream.Collectors;
  8. import java.util.stream.IntStream;
  9.  
  10. /**
  11. * @author jiaqing.xu@hand-china.com
  12. * @version 1.0
  13. * @name
  14. * @description
  15. * @date 2018/7/15
  16. */
  17. public class BasicTest {
  18. public static void main(String[] args) {
  19.  
  20. //创建串行流
  21. List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
  22. List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
  23. filtered.forEach(System.out::println);
  24.  
  25. //使用foreach进行数据迭代 limit 方法用于获取指定数量的流
  26. Random random = new Random();
  27. random.ints().limit(10).forEach(System.out::println);
  28.  
  29. //Map用于映射每个元素对应的结果,原值为i 映射到i*i .collect(Collectors.toList()):将stream再转换回list集合
  30. List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
  31. // 获取对应的平方数
  32. List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().limit(2).collect(Collectors.toList());
  33. squaresList.forEach(System.out::println);
  34.  
  35. //filter 方法用于通过设置的条件过滤出元素
  36. List<String> stringList = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
  37. // 获取空字符串的数量
  38. Long count = stringList.stream().filter(string -> string.isEmpty()).count();
  39. System.out.println("The count of empty string:"+count);
  40.  
  41. //sorted用于对流进行排序,默认是从小到大
  42. List<Integer> array = Arrays.asList(1,3,2,4);
  43. List<Integer> sortedList = array.stream().sorted().collect(Collectors.toList());
  44. sortedList.forEach(System.out::println);
  45.  
  46. //流并行处理程序parallelStream
  47. List<String> stringList2 = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl","");
  48. // 获取空字符串的数量
  49. Long count2 = stringList2.parallelStream().filter(string -> string.isEmpty()).count();
  50. System.out.println("The count of empty string:"+count2);
  51.  
  52. //collectors 可以返回列表或者字符串
  53. List<String> stringList3 = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl","");
  54. String mergedString = stringList3.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
  55. System.out.println("合并字符串: " + mergedString);
  56.  
  57. //
  58. int[] numberList = {12,3,34,67,100,99};
  59.  
  60. IntStream intStream = IntStream.of(numberList);
  61. IntSummaryStatistics stats = intStream.summaryStatistics();
  62.  
  63. System.out.println("列表中最大的数 : " + stats.getMax());
  64. System.out.println("列表中最小的数 : " + stats.getMin());
  65. System.out.println("所有数之和 : " + stats.getSum());
  66. System.out.println("平均数 : " + stats.getAverage());
  67. }
  68. }

二、分组和合并

  1. /**
  2. * @author jiaqing.xu@hand-china.com
  3. * @version 1.0
  4. * @name
  5. * @description 分组、合并测试dto
  6. * @date 2018/7/15
  7. */
  8. public class Foo {
  9.  
  10. private int code;
  11.  
  12. private int count;
  13.  
  14. public Foo(int code, int count) {
  15. this.code = code;
  16. this.count = count;
  17. }
  18.  
  19. public int getCode() {
  20. return code;
  21. }
  22.  
  23. public void setCode(int code) {
  24. this.code = code;
  25. }
  26.  
  27. public int getCount() {
  28. return count;
  29. }
  30.  
  31. public void setCount(int count) {
  32. this.count = count;
  33. }
  34.  
  35. @Override
  36. public String toString() {
  37. return "Foo{" +
  38. "code=" + code +
  39. ", count=" + count +
  40. '}';
  41. }
  42. }
  1. /**
  2. * @author jiaqing.xu@hand-china.com
  3. * @version 1.0
  4. * @name
  5. * @description 测试分组和合并 groupingBy方法以及reduce方法
  6. * @date 2018/7/15
  7. */
  8. public class TestFoo {
  9. public static void main(String[] args) {
  10. Foo foo1 = new Foo(1, 2);
  11. Foo foo2 = new Foo(2, 23);
  12. Foo foo3 = new Foo(2, 6);
  13. List<Foo> list = new ArrayList<>(4);
  14. list.add(foo1);
  15. list.add(foo2);
  16. list.add(foo3);
  17. Map<Integer, List<Foo>> collect = list.stream().collect(Collectors.groupingBy(Foo::getCode));
  18. //存储最后的汇总结果集合
  19. List<Foo> result = new ArrayList<>();
  20. collect.forEach((k,v)->{
  21. Optional<Foo> sum = v.stream().reduce(
  22. (v1, v2) -> { //合并
  23. v1.setCount(v1.getCount()+v2.getCount());
  24. return v1;
  25. }
  26. );
  27. result.add(sum.orElse(new Foo(0,10)));
  28. });
  29. result.forEach(System.out::print);
  30.  
  31. }
  32. }

将2号记录的count值进行了合并汇总!23+6=29

Java8新特性——stream流的更多相关文章

  1. 这可能是史上最好的 Java8 新特性 Stream 流教程

    本文翻译自 https://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/ 作者: @Winterbe 欢迎关注个人微信公众 ...

  2. Java8新特性 Stream流式思想(二)

    如何获取Stream流刚开始写博客,有一些不到位的地方,还请各位论坛大佬见谅,谢谢! package cn.com.zq.demo01.Stream.test01.Stream; import org ...

  3. Java8新特性Stream流应用示例

    Java8新特性介绍 过滤集合 List<String> newList = list.stream().filter(item -> item != null).collect(C ...

  4. java8 新特性Stream流的应用

    作为一个合格的程序员,如何让代码更简洁明了,提升编码速度尼. 今天跟着我一起来学习下java 8  stream 流的应用吧. 废话不多说,直入正题. 考虑以下业务场景,有四个人员信息,我们需要根据性 ...

  5. Java8新特性 Stream流式思想(一)

    遍历及过滤集合中的元素使用传统方式遍历及过滤集合中的元素package cn.com.zq.demo01.Stream.test01.Stream; import java.util.ArrayLis ...

  6. Java8新特性 Stream流式思想(三)

    Stream接口中的常用方法 forEach()方法package cn.com.cqucc.demo02.StreamMethods.Test02.StreamMethods; import jav ...

  7. Java8 新特性 —— Stream 流式编程

    本文部分摘自 On Java 8 流概述 集合优化了对象的存储,大多数情况下,我们将对象存储在集合是为了处理他们.使用流可以帮助我们处理对象,无需迭代集合中的元素,即可直接提取和操作元素,并添加了很多 ...

  8. java8 新特性 Stream流 分组 排序 过滤 多条件去重

    private static List<User> list = new ArrayList<User>(); public static void main(String[] ...

  9. Java8 新特性 Stream 无状态中间操作

    无状态中间操作 Java8 新特性 Stream 练习实例 中间无状态操作,可以在单个对单个的数据进行处理.比如:filter(过滤)一个元素的时候,也可以判断,比如map(映射)... 过滤 fil ...

随机推荐

  1. 2019 ICPC南京网络预选赛 I Washing clothes 李超线段树

    题意:有n个人,每个人有一件衣服需要洗,可以自己手洗花费t时间,也可以用洗衣机洗,但是洗衣机只有一台,即每个时刻最多只能有·一个人用洗衣机洗衣服.现在给你每个人最早可以开始洗衣服的时间,问当洗衣机的洗 ...

  2. CodeForces - 940E - Cashback +贪心+DP

    传送门:CodeForces - 940E - Cashback 题意:在一个长度为n的数组中,可以分出长度为 k 连续的多个数组b(每个数组 b 的 k 可不相同),然后,可以对每个数组 b 进行删 ...

  3. SDU暑期集训排位(2)

    A. Art solved by sdcgvhgj 3min 签到 B. Biology solved by sdcgvhgj 85min 暴力 C - Computer Science solved ...

  4. CSU 1804: 有向无环图 拓扑排序 图论

    1804: 有向无环图 Submit Page   Summary   Time Limit: 5 Sec     Memory Limit: 128 Mb     Submitted: 716    ...

  5. SpringDataJpa入门案例及查询详细解析

    SpringDataJpaSpring Data JPA 让我们解脱了DA0层的操作,基本上所有CRUD都可以依赖于它来实现,在实际的工作工程中,推荐使用Spring Data JPA+ORM(如:h ...

  6. 用.NET写“算命”程序

    用.NET写"算命"程序 "算命",是一种迷信,我父亲那一辈却执迷不悟,有时深陷其中,有时为求一"上上签",甚至不惜重金,向"天神 ...

  7. pyppeteer的使用

    pyppeteer的使用 安装 属于第三方模块进行安装. pip install pyppeteer 在Linux中,如果权限不够则加上. sudo pip install pyppeteer 使用 ...

  8. Erlcron分析学习

    介绍 Erlcron实现类似Linux下面的cron的计划任务. 源码下载地址:https://github.com/erlware/erlcron 原理 Erlcron进程监控树 ecrn_cron ...

  9. 5分钟理解 SpringBoot 响应式的核心-Reactor

    目录 一.前言 二. Mono 与 Flux 构造器 三. 流计算 1. 缓冲 2. 过滤/提取 3. 转换 4. 合并 5. 合流 6. 累积 四.异常处理 五.线程调度 小结 参考阅读 一.前言 ...

  10. java多线程之创建线程的4种方式及Future

    Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.Java可以用四种方式来创建线程: 继承Thread创建线程 实现Runnable接口创建线程 实现callab ...