我们日常工作中,对于数据遍历、分组以及转换需要大量代码实现,借助java8新特性—LambdaLambda 流操作,几行代码可以帮助我们实现复杂代码,这里把 Lambda 流的常用方法用案列讲解一下。
ForEach

集合的遍历 forEach 方法:

public void testForEach(){List<String> list = new ArrayList<String>() {{add("小明");add("小张");add("小李");}};//遍历list.forEach(s-> System.out.println(s));}

Collect

将操作后的对象转化为新的对象:

public void testCollect(){List<String> list = new ArrayList<String>() {{add("小明");add("小张");add("小李");}};//转换为新的listList newList = list.stream().map(s -> Integer.valueOf(s)).collect(Collectors.toList());}

Filter

Filter 为过滤的意思,只要满足 Filter 表达式的数据就可以留下来,不满足的数据被过滤掉。

public void testFilter() {List<String> list = new ArrayList<String>() {{add("小明");add("小张");add("小李");}};        list.stream()// 过滤掉我们希望留下来的值// 表示我们希望字符串是 “小李” 能留下来// 其他的过滤掉.filter(str -> "小李".equals(str)).collect(Collectors.toList());}

Map

map 方法可以让我们进行一些流的转化,比如原来流中的元素是 A,通过 map 操作,可以使返回的流中的元素是 B。

public void testMap() {List<String> list = new ArrayList<String>() {{add("zhang san");add("li si");add("wang wu");}};//通过map方法list中元素转化成小写List<String> strLowerList = list.stream().map(str -> str.toLowerCase()).collect(Collectors.toList());}

MapToInt

mapToInt 方法的功能和 map 方法一样,只不过 mapToInt 返回的结果已经没有泛型,已经明确是 int 类型的流了。

源码如下:

public void testMapToInt() {List<String> list = new ArrayList<String>() {{add("1");add("2");add("3");}};list.stream().mapToInt(s->Integer.valueOf(s))// 一定要有 mapToObj,因为 mapToInt 返回的是 IntStream,因为已经确定是 int 类型了// 所有没有泛型的,而 Collectors.toList() 强制要求有泛型的流,所以需要使用 mapToObj// 方法返回有泛型的流.mapToObj(s->s).collect(Collectors.toList());list.stream().mapToDouble(s->Double.valueOf(s))// DoubleStream/IntStream 有许多 sum(求和)、min(求最小值)、max(求最大值)、average(求平均值)等方法.sum();}

Distinct

distinct 方法有去重的功能:

public void testDistinct(){List<String> list = new ArrayList<String>() {{add("1");add("2");add("2");}};list.stream().map(s -> Integer.valueOf(s)).distinct().collect(Collectors.toList());}

Sorted

Sorted 方法提供了排序的功能,并且允许我们自定义排序。

public void testSorted(){List<String> list = new ArrayList<String>() {{add("1");add("2");add("3");}};list.stream().map(s -> Integer.valueOf(s))// 等同于 .sorted(Comparator.naturalOrder()) 自然排序.sorted().collect(Collectors.toList());// 自定义排序器list.stream().map(s -> Integer.valueOf(s))// 反自然排序.sorted(Comparator.reverseOrder()).collect(Collectors.toList());}

groupingBy

groupingBy 是能够根据字段进行分组,toMap 是把 List 的数据格式转化成 Map 的格式。

public void testGroupBy(){List<String> list = new ArrayList<String>() {{add("1");add("2");add("2");}};Map<String, List<String>> strList = list.stream().collect(Collectors.groupingBy(s -> {if("2".equals(s)) {return "2";}else {return "1";}}));}

FindFirst

findFirst 表示匹配到第一个满足条件的值就返回:

public void testFindFirst(){List<String> list = new ArrayList<String>() {{add("1");add("2");add("2");}};list.stream().filter(s->"2".equals(s)).findFirst().get();// 防止空指针list.stream().filter(s->"2".equals(s)).findFirst()// orElse 表示如果 findFirst 返回 null 的话,就返回 orElse 里的内容.orElse("3");Optional<String> str= list.stream().filter(s->"2".equals(s)).findFirst();// isPresent 为 true 的话,表示 value != nullif(str.isPresent()){return;}}

Reduce

reduce 方法允许我们在循环里面叠加计算值:

public void testReduce(){List<String> list = new ArrayList<String>() {{add("1");add("2");add("3");}};list.stream().map(s -> Integer.valueOf(s))// s1 和 s2 表示循环中的前后两个数.reduce((s1,s2) -> s1+s2).orElse(0);list.stream().map(s -> Integer.valueOf(s))// 第一个参数表示基数,会从 100 开始加.reduce(100,(s1,s2) -> s1+s2);}

Peek

peek 方法很简单,我们在 peek 方法里面做任意没有返回值的事情,比如打印日志:

public void testPeek(){List<String> list = new ArrayList<String>() {{add("1");add("2");add("3");}};list.stream().map(s -> Integer.valueOf(s)).peek(s -> System.out.println(s)).collect(Collectors.toList());}

Limit

limit 方法会限制输出值个数,入参是限制的个数大小:

public void testLimit(){List<String> list = new ArrayList<String>() {{add("1");add("2");add("3");}};list.stream().map(s -> Integer.valueOf(s)).limit(2L).collect(Collectors.toList());}

Max,Min

通过 max、min 方法,可以获取集合中最大、最小的对象。

public void testMaxMin(){List<String> list = new ArrayList<String>() {{add("1");add("2");add("2");}};list.stream().max(Comparator.comparing(s -> Integer.valueOf(s))).get();list.stream().min(Comparator.comparing(s -> Integer.valueOf(s))).get();}

java8新特性之Lambda流常用表达式的方法合集相关推荐

  1. 使用Java8新特性(stream流、Lambda表达式)实现多个List 的笛卡尔乘积 返回需要的List<JavaBean>

    需求分析: 有两个Long类型的集合 : List<Long> tagsIds; List<Long> attributesIds; 现在需要将这两个Long类型的集合进行组合 ...

  2. 【java8新特性】——lambda表达式与函数式接口详解(一)

    一.简介 java8于2014年发布,相比于java7,java8新增了非常多的特性,如lambda表达式.函数式接口.方法引用.默认方法.新工具(编译工具).Stream API.Date Time ...

  3. Java8 新特性:Lambda 表达式、方法和构造器引用、Stream API、新时间与日期API、注解

    Java8新特性:Lambda 表达式.方法和构造器引用.Stream API.新时间与日期API.注解 1.Java8新特性 1.1.主要的新特性: 1.2.编程风格 2.Lambda 表达式 2. ...

  4. java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合

    java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合 比如,我有一张表: entity Category.java service CategoryServic ...

  5. java8新特性之lambda表达式--超级详细版本

    java8新特性之lambda表达式 1.什么是lambda表达式?为什么用它? 2. 为什么Java需要lambda表达式? 3. lambda表达式的语法 4.函数式接口 4.1 什么是函数式接口 ...

  6. java8新特性总结——lambda表达式

    最近看尚硅谷java8新特性视屏,总结一下学习知识. Lambda表达式:是一个匿名函数,我们可以把Lambda理解为一段可以传递的代码(将代码像数据一样传递),可以写出更简洁更灵活的代码.作为一种更 ...

  7. 零基础学习java------21---------动态代理,java8新特性(lambda, stream,DateApi)

    1. 动态代理 在一个方法前后加内容,最简单直观的方法就是直接在代码上加内容(如数据库中的事务),但这样写不够灵活,并且代码可维护性差,所以就需要引入动态代理 1.1 静态代理实现 在讲动态代理之前, ...

  8. java stream byte_乐字节-Java8新特性之Stream流(上)

    上一篇文章,小乐给大家介绍了<Java8新特性之方法引用>,下面接下来小乐将会给大家介绍Java8新特性之Stream,称之为流,本篇文章为上半部分. 1.什么是流? Java Se中对于 ...

  9. Java8新特性之Lambda,呦呦呦

    Java8新特征之Lambda Lambda表达式(也称为闭包),它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理.很多语言(Groovy.Scala等)从设计之初就支持Lambda ...

最新文章

  1. Java中date和calendar的用法
  2. java设计模式---构建者模式
  3. vue中监听input框获取焦点,失去焦点的问题
  4. 高通平台 MIC BIAS 的问题
  5. .net core将URL请求格式化为XML或JSON(网站动态生成sitemap.xml)
  6. 格式化的盘要怎么恢复数据
  7. .NET Core + Spring Cloud:API 网关
  8. 团队作业—预则立他山之石
  9. oracle 11g 卸载  客户端卸载
  10. python画十字_matplotlib绘制鼠标的十字光标的实现(内置方式)
  11. 本科论文房地产公司财务风险评价与控制研究
  12. Windows下删除文件夹提示找不到该项目,请确认该项目的位置,然后重试。
  13. 使用PowerShell管理Exchange Server 2016
  14. 看风水不如依照这些定律改造命运
  15. css 关于元素选中时会显示蓝色背景
  16. python处理word替换_python替换word中的关键文字(使用通配符)
  17. oracle avg() 绝对平均值
  18. 计算机5大的控件的功能,7款顶级功能插件,每一款都堪称办公宝典!
  19. CodeM 第二题 可乐
  20. hdu 3003-Pupu-快速幂取模

热门文章

  1. HTML5使用Geoloacation API检测浏览器的支持性
  2. 第一章 聚合函数概述
  3. Python重复值的处理
  4. 社群运营增长与变现第02讲:社群运营新思维模式:C-ACM-MT 模型,全链路思考
  5. android:layout_marginbottom,layout_marginBottom不能用的解决方法
  6. QQ 聊天机器人小薇 2.1.0 发布!
  7. 深拷贝与浅拷贝的那些事儿
  8. 【软件设计】软件设计到底是什么?
  9. vhdl八路抢答器简单程序_贵州抢答器plc程序编程图-云南尼邦商贸
  10. 太阳的光和灯光有什么区别_灯光和太阳光能量完全不同,亮度也相差巨大,速度会不同吗?...