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);});

转载于:https://www.cnblogs.com/qwangxiao/p/10113051.html

Lambda表达式使用2相关推荐

  1. Lambda 表达式基础理论与示例

    Lambda 表达式基础理论与示例 Lambda 表达式,也可称为闭包,推动 Java 8 发布的最重要新特性. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). 使用 Lam ...

  2. lambda表达式树

    一.定义: 表达式树又称为表达式目录树,以数据形式表示语言级代码.所有的数据都存储在树结构中,每个结点表示一个表达式(Expression). 二.要点: –Lambda表达式的参数类型可以忽略,因为 ...

  3. java 8 lambda reduce_JDK8新特性Lambda表达式体验

    "Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstra ...

  4. java saf_Java 8 Lambda表达式探险

    为什么? 我们为什么需要Lambda表达式 主要有三个原因: > 更加紧凑的代码 比如Java中现有的匿名内部类以及监听器(listeners)和事件处理器(handlers)都显得很冗长 &g ...

  5. lamda表达式python_Python--13 lambda表达式

    python 允许使用lambda表达式来创建匿名函数 lambda表达式 >>>def ds(x): ... return 2 * x +1 ... >>> ds ...

  6. C++11:Lambda表达式(匿名函数)理解

    C++在C11标准中引入了匿名函数,即没有名字的临时函数,又称之为lambda表达式.lambda表达式 实质上是创建一个匿名函数/对象.即你可以理解为(Lambda 表达式实际上是一个函数,只是它没 ...

  7. java8 lambda 表达式详解

    lambada 表达式实质上是一个匿名方法,但该方法并非独立执行,而是用于实现由函数式接口定义的唯一抽象方法 使用 lambda 表达式时,会创建实现了函数式接口的一个匿名类实例 可以将 lambda ...

  8. Java8中Lambda表达式的10个例子

    Java8中Lambda表达式的10个例子  例1 用Lambda表达式实现Runnable接口 Java代码   //Before Java 8: new Thread(new Runnable() ...

  9. 【读书笔记】Lambda表达式

    Lambda表达式,是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型. Lambda表达式, 都是用"=>"运算符. 读作"goes t ...

  10. 【C++】lambda 表达式

    1.lambda 表达式 1.1 lambda 特点 lambda表示一个可调用单元,可视为内联函数 范式 : 具有一个返回类型,一个参数列表,一个函数体 [captrue list](paramet ...

最新文章

  1. 重复工作自动化——excel导入方案
  2. ICG游戏:证明,先手不是必胜就是必败。
  3. C++ 标准输入输出流
  4. jQuery常用操作
  5. 替换WordPress调用的Google前端库为360镜像的库
  6. 元气骑士如何获得机器人成就皮肤_元气骑士:9大英雄特典皮肤2技能特效优化,“颜控”玩家有福了...
  7. ZooKeeper:分布式应用程序的分布式协调服务
  8. C++学习之路: 智能指针入门
  9. python 类 super_python的类的super()
  10. Java设计模式------单例模式
  11. 题目:有一分数序列:2 / 1,3 / 2,5 / 3,8 / 5,13 / 8,21 / 13...求出这个数列的前20项之和。
  12. din字体是开源字体吗_字体 DIN 与工业标准
  13. 手机APP的常见功能测试用例
  14. rs485接口上下拉_带内部上下拉电阻的无极性rs-485接口芯片的制作方法
  15. 利用AVR单片机控制LCD320240彩屏
  16. Harris角点检测 及 Matlab实验
  17. mediawiki mysql配置_MediaWiki 搭建与配置使用
  18. 车架识别手机端只是一种?
  19. 批量将 PDF 转为 ePub 格式文档
  20. dede 修改首页默认访问路径/dede修改安装目录

热门文章

  1. 【Python CheckiO 题解】First Word
  2. php个人扫码支付,PHP个人发卡网源码,支持MA支付对接,扫码自动发货
  3. 【 HDU - 5093】Battle ships(匈牙利算法,二分图匹配)
  4. *【POJ - 3659】Cell Phone Network (树形dp,最小支配集)
  5. 【HDU - 1540】 Tunnel Warfare (线段树进阶操作 区间合并+ 单点更新+ 最长覆盖区间查询 )
  6. 重读经典《Quaternion kinematics for the error-state Kalman filter》
  7. python创建变量并赋值_python怎么给变量赋值
  8. Maven学习记录之maven基本操作命令,maven本地工厂的创建,maven骨架的生成,以及在eclipse中创建maven工程:...
  9. Git(9)-diff
  10. LeetCode - Easy - 169. Majority Element