Lambda表达式使用2
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的更多相关文章
- 你知道C#中的Lambda表达式的演化过程吗?
那得从很久很久以前说起了,记得那个时候... 懵懂的记得从前有个叫委托的东西是那么的高深难懂. 委托的使用 例一: 什么是委托? 个人理解:用来传递方法的类型.(用来传递数字的类型有int.float ...
- Linq表达式、Lambda表达式你更喜欢哪个?
什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性. 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在& ...
- 背后的故事之 - 快乐的Lambda表达式(一)
快乐的Lambda表达式(二) 自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜.它优雅,对开发者更友好,能提高开发效率,天啊!它还有可能 ...
- Kotlin的Lambda表达式以及它们怎样简化Android开发(KAD 07)
作者:Antonio Leiva 时间:Jan 5, 2017 原文链接:https://antonioleiva.com/lambdas-kotlin/ 由于Lambda表达式允许更简单的方式建模式 ...
- java8中lambda表达式的应用,以及一些泛型相关
语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...
- 背后的故事之 - 快乐的Lambda表达式(二)
快乐的Lambda表达式 上一篇 背后的故事之 - 快乐的Lambda表达式(一)我们由浅入深的分析了一下Lambda表达式.知道了它和委托以及普通方法的区别,并且通过测试对比他们之间的性能,然后我们 ...
- CRL快速开发框架系列教程二(基于Lambda表达式查询)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- Lambda 表达式递归用法实例
注意: 使用Lambda表达式会增加额外开销,但却有时候又蛮方便的. Windows下查找子孙窗口实例: HWND FindDescendantWindows(HWND hWndParent, LPC ...
- Spark中Lambda表达式的变量作用域
通常,我们希望能够在lambda表达式的闭合方法或类中访问其他的变量,例如: package java8test; public class T1 { public static void main( ...
- 释放Android的函数式能量(I):Kotlin语言的Lambda表达式
原文标题:Unleash functional power on Android (I): Kotlin lambdas 原文链接:http://antonioleiva.com/operator-o ...
随机推荐
- PHP:(一)安装并使用PHP
php的安装分为两个部分:环境安装配置和开发工具 一.集成环境安装配置 (一)安装 选择:wampserver或者xampp 我采用的是xampp. 在http://www.sourceforce.n ...
- Hibernate进阶学习4
Hibernate进阶学习4 深入学习hibernate的查询语句 测试HQL查询 package com.hibernate.test; import com.hibernate.domain.Cu ...
- JAVAOOP集合框架
集合框架三大内容:对外的接口.接口的实现和对集合运算的算法 集合有三大类接口:List.Set.Map 共同点:都是集合接口,都可以用来存储很多对象 不同:Collection接口存储一组不唯一(允许 ...
- HTML语义化的重要性
语义化标签就是尽量使用有相对应的结构的含义的Html的标签 1.结构更好,更利于搜索引擎的抓取(SEO的优化)和开发人员的维护(可维护性更高,因为结构清晰,so易于阅读). 2.更有利于特殊终端的阅读 ...
- 编辑工具_vi
vi/vim平时经常会用到,但是一直没有时间系统的整理下,今天看到了一篇不错的介绍文章.引用下,就当做笔记了,但是不晓得该怎么填引用路径,如有侵权请告知,补上引用路径 01. vi 简介 1.1 学习 ...
- 对Neural Machine Translation by Jointly Learning to Align and Translate论文的详解
读论文 Neural Machine Translation by Jointly Learning to Align and Translate 这个论文是在NLP中第一个使用attention机制 ...
- No module named 'PyQt5.sip'
使用pyinstaller打包python文件为windows可执行程序可能遇到的问题 pyinstaller yourprogram.py打包的程序双击打开一闪而过,提示上面标题的错误 把pycom ...
- auto用法
在C++11中,如果编译器在定义一个变量的时候可以推断出变量的类型,不用写变量的类型,你只需写auto即可. 第一种用法:自动推到内置类型 int x = 100; //C++ 11 auto x = ...
- 笔记-python-module导入技巧
笔记-python-module导入技巧 1. module导入技巧 1.1. 控制模块导入内容 在模块中定义 __all__ = [] 不多言,主要是影响from <> ...
- android stadio open recent 在同一窗口打开
Android staido 有一个功能是open recent ,默认是下面这样的: 就出来一个框,给你选择,是在新的窗口打开,还是在当前窗口打开.如果你选了当前窗口,并且点了Remember,do ...