1.概述
  
  本篇主要介绍lambda中常用的收集器,收集器的作用就是从数据流中生成需要的数据接口。
  
  最常用的就是Collectors.toList(),只要将它传递给collect()函数,就能够使用它了。
  
  在我们使用收集器的时候经常会用到“方法引用”这样的简写语法:
  
  方法引用:ClassName::methodName
  
  2.代码示例
  
  按照收集器的作用分类
  
  公共代码:
  
  @Data
  
  @NoArgsConstructor
  
  @AllArgsConstructor
  
  public class Artist {
  
  private String name;
  
  private String age;
  
  private boolean isMan;
  
  List<Artist> artists = Lists.newArrayList();
  
  Artist artist1 = new Artist("kido", "28", false);
  
  Artist artist2 = new Artist("tom", "23", true);
  
  Artist artist3 = new Artist("whale", "22", false);
  
  Artist artist4 = new Artist("jack", "26", true);
  
  artists.add(artist1);
  
  artists.add(artist2);
  
  artists.add(artist3);
  
  artists.add(artist4);
  
  // 1.方法引用:ClassName::methodName
  
  List<String> list = artists.stream().map(Artist::getName).collect(Collectors.toList());
  
  list.forEach(name -www.michenggw.com> System.out.println(name));
  
  // 2.元素顺序,集合有序流就有序,集合无序流也无序,使用sorted()可以使得流变得有序
  
  Set<Integer> numbers = new HashSet<>(Arrays.asList(4, 3, 2, 1, 6, 9, 8, 10));
  
  numbers.stream().forEach(x -> System.out.println(x));
  
  System.out.println("---------------------------");
  
  List<Integer> numbersOrder = numbers.stream().sorted().collect(Collectors.toList());
  
  numbersOrder.forEach(x -> System.out.println(x));
  
  // 3.使用收集器, toList() toSet()等
  
  Set<String> set = artists.stream().map(Artist::getName).collect(Collectors.toSet());
  
  set.forEach(x ->yongshiyule178.com/ System.out.println(x));
  
  Map<String, String> map = artists.stream(www.quwanyule157.com ).collect(Collectors.toMap(Artist::getName, Artist::getAge));
  
  map.forEach((key, value) -> System.out.println(key + "<--->" + value));
  
  // 4.转换成值, 找出年龄最大的
  
  Optional<Artist> collect = artists.stream().collect(Collectors.maxBy(Comparator.comparing(item -> item.getAge())));
  
  System.out.println(collect.get());
  
  // 5.数据分块, Predicate对象为true和false
  
  Map<Boolean, List<Artist>> map2 = artists.stream().collect(Collectors.partitioningBy(Artist::isMan));
  
  map2.forEach((key, value) -> {System.out.println(key + "<--->" +value);});
  
  // 6.数据分组,按照姓名分组
  
  Map<String, List<Artist>> map3 = artists.stream().collect(Collectors.groupingBy(Artist::getAge));
  
  map3.forEach((key, value) -> {System.out.println(key + "<--->" +value);});
  
  // 7.字符串,将收集流中的数据生成字符串
  
  String string = artists.stream().map(item www.mhylpt.com/ -> item.getName()).collect(Collectors.joining(", ", "[", "]"));
  
  System.out.println(string);
  
  // 8.组合收集器, 使用groupingBy先分组在计数
  
  Map<Boolean, Long> map4 = artists.stream().collect(Collectors.groupingBy(Artist::isMan, Collectors.counting()));
  
  map4.forEach((key, value) -> {System.out.println(key + "<--->" +value);});

最新文章

  1. linux进程
  2. HTTP和HTTPS
  3. 构建兼容浏览器的Angularjs web应用
  4. 记一次使用命令行启动部署在tomcat上的应用
  5. Sublime Text 3 安装Go语言相关插件gosublime
  6. 一个解决chrome浏览器下input标签当autocomplete的时候背景变黄色同时input背景图片消失方案
  7. Samba结合AD实现域帐号认证的文件服务器
  8. linux设置默认路由细节问题
  9. java培训(5-8节课)
  10. iOSUI基础——懒加载
  11. [译]MDX 介绍
  12. Spring如何管理Session【转贴】
  13. poj-1904(强连通缩点)
  14. Python档案袋(线程 )
  15. var foo = function bar() {}
  16. Oracle drop table 和 truncate table对grant授权的影响
  17. 洛谷P2568 GCD(线性筛法)
  18. Bash:精华
  19. Kafka常用命令收录
  20. 【工具记录】Linux口令破解

热门文章

  1. Oracle中文乱码解决
  2. Hutool Wiki For java
  3. POJ:3061-Subsequence(尺取法模板详解)
  4. POJ:1995-Raising Modulo Numbers(快速幂)
  5. Weblogic Linux jar包安装
  6. 6,MongoDB 之 Array Object 的特殊操作
  7. 3 破解密码,xshell连接
  8. 9 与python2交互
  9. startActivityForResult 请求码不正确
  10. springboot 入门2 开发环境与生产环境采用不同配置问题