JDK8-Lambda表达式集合操作

Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:

它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表

Lambda的使用场景多用于集合

  1. 流 流是Java API的新成员,它允许你以声明性方式处理数据集合,简而言之,可以把它们看成遍历数据集的高级迭代器。此外,流还可以透明地并行处理,无需写任何多线程代码
    • pojo public class Dish { private String name; private Integer calories; private Double price ; public Dish(){ } public Dish(String name , Integer calories,Double price) { this.name = name; this.calories = calories; this.price=price ; } }
    • 测试数据

    public static List<Dish> toLists(){ return Arrays.asList( new Dish("青菜", 700,800.0), new Dish("黄瓜", 700 ,300.0), new Dish("鱼香肉丝", 2000 ,400.0), new Dish("红烧土豆", 730 ,400.0), new Dish("土豆丝", 850 ,600.0), new Dish("红烧鱼", 3000 ,3000.0), new Dish("西红柿鸡蛋", 1050 ,600.0), new Dish("炒三鲜", 1300 ,800.0), new Dish("竹笋炒肉", 2450,1000.0 ) ); } public static List<Integer> toNumbers(){ return Arrays.asList(1,2,3,4); }

    • 筛选操作 ​ filter()过滤、 distinct() 它会返回一个元素的流 @Test public void test(){//以菜名大于3位数的过滤,选择3条数据并输出 toLists().stream().filter(d->d.getName().length()>3).limit(3).distinct().forEach(s-> System.out.println(s)); }
    • 查找匹配操作 ​ StreamAPI通过 allMatch 、 anyMatch 、 noneMatch 、 findFirst 和 findAny 方法提供了这样的工具。某些操作不用处理整个流就能得到结果。只要找到一个元素,就可以有结果 @Test public void test2(){//菜单中所有菜色价格是否全都2000元以上 Boolean temp = toLists().stream().allMatch(d->d.getPrice()>2000); System.out.println(temp);// 满足条件 true 否则 false } @Test public void test3(){//找到第一个数据,直接返回 Optional<Dish> any = toLists().stream().filter(s -> s.getName().length() > 2).findAny(); System.out.println(any); }
      • 归约 ​ 把一个流中的元素组合起来,使用 reduce 操作来表达更复杂的查询 reduce 接受两个参数: 一个初始值,这里是0; 一个 BinaryOperator<T> 来将两个元素结合起来产生一个新值 @Test public void test4(){ Integer sum = toNumbers().stream().reduce(0, Integer::sum) ; // System.out.println(sum); int product = toNumbers().stream().reduce(1, (a, b) -> a * b); System.out.println(product); /*int count = toLists().stream() .map(d -> 1) .reduce(0, (a, b) -> a + b); System.out.println(count);*/ }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏noteless

[二十六]JavaIO之再回首恍然(如梦? 大悟?)

我们上面列出来了ByteArray  File   Piped    Object  String  CharArray 这几种常用的数据源形式

1173
来自专栏Android Note

介绍Kotlin第二部分(翻译篇)

1474
来自专栏个人随笔

Java 持久化操作之 --io流与序列化

1)File类操作文件的属性 1.File类的常用方法 ? 1. 文件的绝对完整路径:getAbsolutePath() 文件名:getName() 文件相对路...

2959
来自专栏一个会写诗的程序员的博客

Kotlin 函数式编程之 Lambda 与 高阶函数《Kotlin 极简教程》Kotlin 开发者社区

1053
来自专栏技术小黑屋

Kotlin中常量的探究

在我们尝试使用Kotlin作为开发语言的时候,应该会想到在Kotlin中如何定义一个常量,就像Java中这样的代码一样

835
来自专栏向治洪

Kotlin 是如何避免空指针问题的

在谈Kotlin的优势的时候,大家都会想到空指针安全这一点,那么Kotlin又是如何避免这些问题的呢?下面从Kotlin的一些语法规则上给出介绍。 可空类型 默...

1987
来自专栏专注 Java 基础分享

Java 字节流操作

     在java中我们使用输入流来向一个字节序列对象中写入,使用输出流来向输出其内容。C语言中只使用一个File包处理一切文件操作,而在java中却有着...

2849
来自专栏C语言及其他语言

【优秀题解】问题 1113: C语言考试练习题_保留字母

斐波纳契数列 1,1,2,3,5,8,13,21,34,55,89……这个数列则称为“斐波纳契数列”,其中每个数字都是“斐波纳契数”。

1073
来自专栏码神联盟

面试题 | 《Java面试题集》 -- 第二套

start()用来启动一个线程,当调用start方法后,系统才会开启一个新的线程,进而调用run()方法来执行任务,而单独的调用run()就跟调用普通方法是一样...

1112
来自专栏Java成神之路

java之IO

    java.io包中定义了多个流类型(类或抽象类)来实现输入/输出功能,可以从不同角度对其分类:

1053

扫码关注云+社区

领取腾讯云代金券