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

Lambda表达式使用2的更多相关文章

  1. 你知道C#中的Lambda表达式的演化过程吗?

    那得从很久很久以前说起了,记得那个时候... 懵懂的记得从前有个叫委托的东西是那么的高深难懂. 委托的使用 例一: 什么是委托? 个人理解:用来传递方法的类型.(用来传递数字的类型有int.float ...

  2. Linq表达式、Lambda表达式你更喜欢哪个?

    什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性. 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在& ...

  3. 背后的故事之 - 快乐的Lambda表达式(一)

    快乐的Lambda表达式(二) 自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜.它优雅,对开发者更友好,能提高开发效率,天啊!它还有可能 ...

  4. Kotlin的Lambda表达式以及它们怎样简化Android开发(KAD 07)

    作者:Antonio Leiva 时间:Jan 5, 2017 原文链接:https://antonioleiva.com/lambdas-kotlin/ 由于Lambda表达式允许更简单的方式建模式 ...

  5. java8中lambda表达式的应用,以及一些泛型相关

    语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...

  6. 背后的故事之 - 快乐的Lambda表达式(二)

    快乐的Lambda表达式 上一篇 背后的故事之 - 快乐的Lambda表达式(一)我们由浅入深的分析了一下Lambda表达式.知道了它和委托以及普通方法的区别,并且通过测试对比他们之间的性能,然后我们 ...

  7. CRL快速开发框架系列教程二(基于Lambda表达式查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  8. Lambda 表达式递归用法实例

    注意: 使用Lambda表达式会增加额外开销,但却有时候又蛮方便的. Windows下查找子孙窗口实例: HWND FindDescendantWindows(HWND hWndParent, LPC ...

  9. Spark中Lambda表达式的变量作用域

    通常,我们希望能够在lambda表达式的闭合方法或类中访问其他的变量,例如: package java8test; public class T1 { public static void main( ...

  10. 释放Android的函数式能量(I):Kotlin语言的Lambda表达式

    原文标题:Unleash functional power on Android (I): Kotlin lambdas 原文链接:http://antonioleiva.com/operator-o ...

随机推荐

  1. PHP:(一)安装并使用PHP

    php的安装分为两个部分:环境安装配置和开发工具 一.集成环境安装配置 (一)安装 选择:wampserver或者xampp 我采用的是xampp. 在http://www.sourceforce.n ...

  2. Hibernate进阶学习4

    Hibernate进阶学习4 深入学习hibernate的查询语句 测试HQL查询 package com.hibernate.test; import com.hibernate.domain.Cu ...

  3. JAVAOOP集合框架

    集合框架三大内容:对外的接口.接口的实现和对集合运算的算法 集合有三大类接口:List.Set.Map 共同点:都是集合接口,都可以用来存储很多对象 不同:Collection接口存储一组不唯一(允许 ...

  4. HTML语义化的重要性

    语义化标签就是尽量使用有相对应的结构的含义的Html的标签 1.结构更好,更利于搜索引擎的抓取(SEO的优化)和开发人员的维护(可维护性更高,因为结构清晰,so易于阅读). 2.更有利于特殊终端的阅读 ...

  5. 编辑工具_vi

    vi/vim平时经常会用到,但是一直没有时间系统的整理下,今天看到了一篇不错的介绍文章.引用下,就当做笔记了,但是不晓得该怎么填引用路径,如有侵权请告知,补上引用路径 01. vi 简介 1.1 学习 ...

  6. 对Neural Machine Translation by Jointly Learning to Align and Translate论文的详解

    读论文 Neural Machine Translation by Jointly Learning to Align and Translate 这个论文是在NLP中第一个使用attention机制 ...

  7. No module named 'PyQt5.sip'

    使用pyinstaller打包python文件为windows可执行程序可能遇到的问题 pyinstaller yourprogram.py打包的程序双击打开一闪而过,提示上面标题的错误 把pycom ...

  8. auto用法

    在C++11中,如果编译器在定义一个变量的时候可以推断出变量的类型,不用写变量的类型,你只需写auto即可. 第一种用法:自动推到内置类型 int x = 100; //C++ 11 auto x = ...

  9. 笔记-python-module导入技巧

    笔记-python-module导入技巧 1.      module导入技巧 1.1.    控制模块导入内容 在模块中定义 __all__ = [] 不多言,主要是影响from <> ...

  10. android stadio open recent 在同一窗口打开

    Android staido 有一个功能是open recent ,默认是下面这样的: 就出来一个框,给你选择,是在新的窗口打开,还是在当前窗口打开.如果你选了当前窗口,并且点了Remember,do ...