1. private static List<User> list = new ArrayList<User>();
  2.  
  3. public static void main(String[] args) {
  4. list = Arrays.asList(
  5. new User(1, "a", 10),
  6. new User(4, "d", 19),
  7. new User(5, "e", 13),
  8. new User(2, "b", 14),
  9. new User(3, "a", 10),
  10. new User(6, "f", 16)
  11. );
  12.  
  13. long start = System.currentTimeMillis();
  14.  
  15. order();
  16.  
  17. println(String.format("耗时[%s]毫秒", (System.currentTimeMillis() - start)));
  18.  
  19. }
  20.  
  21. /**
  22. * 多条件去重
  23. * @param list
  24. */
  25. public static void order() {
  26. list.stream().collect(Collectors.collectingAndThen(
  27. Collectors.toCollection(() -> new TreeSet<>(
  28. Comparator.comparing(o -> o.getAge() + ";" + o.getName()))), ArrayList::new)).forEach(u -> println(u));
  29. }
  30.  
  31. public static void group() {
  32. Map<Integer, List<User>> collect = list.stream().collect(Collectors.groupingBy(User::getAge));
  33. System.out.println(collect);
  34. }
  35.  
  36. /**
  37. * filter过滤
  38. * @param list
  39. */
  40. public static void filterAge() {
  41. list.stream().filter(u -> u.getAge() == 10).forEach(u -> println(u));
  42. }
  43.  
  44. /**
  45. * sorted排序
  46. */
  47. public static void stord() {
  48. list.stream().sorted(Comparator.comparing(u-> u.getAge())).forEach(u -> println(u));
  49.  
  50. }
  51. /**
  52. * limit方法限制最多返回多少元素
  53. */
  54. public static void limit() {
  55. list.stream().limit(2).forEach(u -> println(u));
  56. }
  57. /**
  58. * 不要前多n个元素,n大于满足条件的元素个数就返回空的流
  59. */
  60. public static void skip() {
  61. list.stream().skip(2).forEach(u -> println(u));
  62. }
  63. // 最大值 最小值
  64. public static void statistics() {
  65. Optional<User> min = list.stream().min(Comparator.comparing(User::getUserId));
  66. println(min);
  67. Optional<User> max = list.stream().max(Comparator.comparing(User::getUserId));
  68. println(max);
  69. }
  70.  
  71. // 统计
  72. public static void summarizingInt(){
  73. IntSummaryStatistics statistics = list.stream().collect(Collectors.summarizingInt(User::getAge));
  74. double average = statistics.getAverage();
  75. long count = statistics.getCount();
  76. int max = statistics.getMax();
  77. int min = statistics.getMin();
  78. long sum = statistics.getSum();
  79. println(average);
  80. println(count);
  81. println(min);
  82. println(sum);
  83. println(max);
  84.  
  85. }
  86. /**
  87. * 转set
  88. */
  89. public static void toSet() {
  90. Set<User> collect = list.stream().collect(Collectors.toSet());
  91. Iterator<User> iterator = collect.iterator();
  92. while(iterator.hasNext()) {
  93. System.out.println(iterator.next().getUserId());
  94. }
  95. }
  96.  
  97. /**
  98. * 转map
  99. */
  100. public static void toMap() {
  101. Map<Integer, User> collect = list.stream().collect(Collectors.toMap(User::getUserId, u -> u));
  102. for (Integer in : collect.keySet()) {
  103. User u = collect.get(in);//得到每个key多对用value的值
  104. println(u);
  105. }
  106. }
  107. /**
  108. *map
  109. */
  110. public static void map() {
  111. list.stream().map(User::getUserId).forEach(userId -> println(userId));
  112. list.stream().mapToInt(User::getAge).forEach(userId -> println(userId));
  113. list.stream().mapToDouble(User::getUserId).forEach(userId -> println(userId));
  114. list.stream().mapToLong(User::getUserId).forEach(userId -> println(userId));
  115. }
  116.  
  117. /**
  118. * 查找与匹配
  119. * allMatch方法与anyMatch差不多,表示所有的元素都满足才返回true。noneMatch方法表示没有元素满足
  120. */
  121. public static void anyMatch() {
  122. boolean anyMatch = list.stream().anyMatch(u -> u.getAge() == 100);
  123. boolean allMatch = list.stream().allMatch(u -> u.getUserId() == 10);
  124. boolean noneMatch = list.stream().noneMatch(u -> u.getUserId() == 10);
  125. println(anyMatch);
  126. println(allMatch);
  127. println(noneMatch);
  128. }
  129.  
  130. /**
  131. * reduce操作
  132. */
  133. public static void reduce() {
  134. Optional<Integer> sum = list.stream().map(User::getAge).reduce(Integer::sum);
  135. Optional<Integer> max = list.stream().map(User::getAge).reduce(Integer::max);
  136. Optional<Integer> min = list.stream().map(User::getAge).reduce(Integer::min);
  137. println(sum);
  138. println(max);
  139. println(min);
  140. }
  141. /**
  142. * 公共输出
  143. * @param c
  144. */
  145. public static void println(Object c) {
  146. System.out.println(c.toString());
  147. }

java8 新特性 Stream流 分组 排序 过滤 多条件去重的更多相关文章

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

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

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

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

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

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

  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流

    一.基本API初探 package java8.stream; import java.util.Arrays; import java.util.IntSummaryStatistics; impo ...

  9. Java8 新特性 Stream() API

    新特性里面为什么要加入流Steam() 集合是Java中使用最多的API,几乎每一个Java程序都会制造和处理集合.集合对于很多程序都是必须的,但是如果一个集合进行,分组,排序,筛选,过滤...这些操 ...

随机推荐

  1. Android Fragment重要函数

    Fragment的常用函数: 一.Fragment对象 1.void setArguments(Bundle args); 这个函数为Fragment提供构造参数(也就是数据),参数以Bundle类型 ...

  2. Android 弹出框Dialog并缩放图片

    java代码 Activity: // 调用dialog,参数:1:自身的activity,2:Bitmap bm读取好的图片 MyDialog dialog = new MyDialog(MyAct ...

  3. Bitmap到底占多少内存

    转至:Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存? Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟 ...

  4. volley4--RequestQueue

    源码: /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, V ...

  5. JavaScript 模块化入门

    理解模块 模块打包构建 webpack牛刀小试

  6. 如何清除SQL 的登录名

    复制路径 找到SqlStudio.bin 文件删除即可 SQL Server 2016 版本: C:\Users\%username%\AppData\Roaming\Microsoft\SQL Se ...

  7. python的逻辑运算符

    函数就是特殊的变量(这个变量是不加引号的)  我们 如果直接打印一个函数的名字是直接打印这个函数的内存地址 python的运算符: 首先Python的运算符和其他语言的运算符都是一样的  都有:算数运 ...

  8. 简说mvc路由

    首先我们通过在Global.asax中的Application_Start将路由信息注册到RouteTable的Routes静态属性中.如下代码所示: public class RouteTable ...

  9. 装饰器( decorate )

    装饰器分步解释-形成过程: #-*- coding: UTF-8 -*- #示例1: def deco(p_args): def pack(): print('haha,i am deco fun') ...

  10. HTML IMG标签SRC为null

    今天做项目遇到一个错 研究了半天才发现 其实就是一个小错 稍微注意一下 就能规避 HTML标签<img src="null">这种情况下在chrom的debug下就会报 ...