常用Lambda函数式接口

1-概述

有且只有一个抽象方法,为Lambda准备的接口

都是由@FunctionalInterface进行的注解

2-函数式接口作为方法的参数

创建线程,用的最多且经典的Lambda使用

/*** @author Object(object_hui@sina.com)* @description Lambda创建线程* @date 2020/9/22*/
public class Demo01 {public static void main(String[] args) {new Thread(new Runnable() {@Overridepublic void run() {System.out.println("使用内部类创建了一个线程!");}}).start();new Thread(() -> System.out.println("省略写法的Lambda创建的线程类")).start();}
}

3-函数式接口作为方法的返回值

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;/*** @author Object(object_hui@sina.com)* @description 函数式接口作为方法的返回值* @date 2020/9/22*/
public class Demo02 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("111");list.add("333");list.add("555");list.add("222");list.add("666");list.add("888");System.out.println("调用排序前");System.out.println(list);System.out.println("调用排序后");//调用集合排序方法,传入集合和比较器Collections.sort(list,getCompartor());System.out.println(list);}public static Comparator<String> getCompartor(){//两种写法等价,通过Lambda实现函数式接口返回一个比较器
//        return (o1, o2) -> o1.compareTo(o2);return String::compareTo;}
}

4-常用的函数式接口

4.1-Supplier

生产接口,我们通常用这个接口来获取一个可操作的数据

import java.util.function.Supplier;/*** @author Object(object_hui@sina.com)* @description Supplier测试类* @date 2020/9/22*/
public class SupplierDemo {public static void main(String[] args) {//使用生产者接口获取一个Integer类型的数Integer integer = getInteger(() -> 1314);System.out.println(integer);//使用生产者接口获取一个String类型的数String str = getString(() -> "1314");System.out.println(str);//使用生产者接口返回一个数组中的最大值int[] arr = {45,78,22,63};Integer max1 = getMax(() -> {int max = arr[0];for (int i = 1; i < arr.length; i++) {if (max < arr[i])max = arr[i];}return max;});System.out.println(max1);}private static Integer getInteger(Supplier<Integer> sup){return sup.get();}public static String getString(Supplier<String> sup){return sup.get();}public static Integer getMax(Supplier<Integer> sup){return sup.get();}}

4.2-Consumer

消费者接口,对一些数据进行操作,不需要进行返回


import java.util.function.Consumer;/*** @author Object(object_hui@sina.com)* @description 消费函数lambda* @date 2020/9/23*/
public class ConsumerDemo {public static void main(String[] args) {//消费两次,进行打印输出runConsumer("伊利丹.怒风",s -> System.out.println(s),s -> System.out.println(s));//使用引用替代runConsumer("伊利丹.怒风",System.out::println,System.out::println);}//将字符串name进行消费,先由con1消费,再由con2消费private static void runConsumer(String name, Consumer<String> con1,Consumer<String> con2){con1.andThen(con2).accept(name);}
}
  • 小应用:使用Consumer将数组中的内容按照指定的格式输出
import java.util.function.Consumer;/*** @author Object(object_hui@sina.com)* @description 使用Consumer将字符串数组按规定输出* @date 2020/9/23*/
public class ConsumerDemo02 {public static void main(String[] args) {String[] arr = {"伊利丹.怒风,102","卡尔萨斯,88","安吉娜,78"};runConsumer(arr,s -> System.out.print("姓名:"+s.split(",")[0]+"\t"),s -> System.out.println("\t年龄:"+s.split(",")[1]));}public static void runConsumer(String[] arr, Consumer<String> con1,Consumer<String> con2){for (String s:arr) {con1.andThen(con2).accept(s);}}
}

4.3-Predicate

用于判断是否满足指定的条件的函数

import java.util.function.Predicate;/*** @author Object(object_hui@sina.com)* @description Predicate小测试* @date 2020/9/23*/
public class PredicateDemo {public static void main(String[] args) {//判断名字的长度是否大于2System.out.println(runPredicate("伊利丹.怒风",s -> s.length()>2));}//使用Predicate函数接口,对字符串进行判断public static boolean runPredicate(String name, Predicate<String> pre){return pre.test(name);//非的写法
//        return pre.negate().test(name);}
}
  • 小案例:筛选名字长度大于4,且年龄大于100的数据

    
    import java.util.ArrayList;
    import java.util.function.Predicate;/*** @author Object(object_hui@sina.com)* @description 使用Predicate将字符串数组按规定输出* @date 2020/9/23*/
    public class ConsumerDemo02 {public static void main(String[] args) {String[] arr = {"伊利丹.怒风,102","卡尔萨斯,88","安吉娜,78","格罗姆·地狱咆哮,103","沃金,133"};//条件1:名字长度大于4,条件2:年龄大于100ArrayList<String> list = runConsumer(arr, s -> s.split(",")[0].length() > 4,s -> Integer.parseInt(s.split(",")[1]) > 100);System.out.println(list);}public static ArrayList<String> runConsumer(String[] arr, Predicate<String> pre1, Predicate<String> pre2){ArrayList<String> list = new ArrayList<>();for (String s:arr) {//满足两个条件则加入集合if (pre1.and(pre2).test(s))list.add(s);}return list;}
    }
    

4.4-Function

加工函数

Function<T,R>:用于参数转换,把T加工成R

import java.util.function.Function;/*** @author Object(object_hui@sina.com)* @description Function测试类,将String类型加工成Integer类型* @date 2020/9/24*/
public class FunctionDemo {public static void main(String[] args) {//使用lambda表达式System.out.println(runFunction("1314",s -> Integer.parseInt(s)));//使用引用替代System.out.println(runFunction("1314",Integer::parseInt));}public static Integer runFunction(String s,Function<String,Integer> fun){return fun.apply(s);}
}

常用Lambda函数式接口相关推荐

  1. Java 8 - 03 Lambda 函数式接口Predicate Consumer Function Supplier

    文章目录 Pre Predicate 断言型函数式接口 Consumer 消费型函数式接口 Function 功能型函数式接口 Supplier 供给型函数式接口 小结 函数式接口如何处理异常信息 P ...

  2. 常用的函数式接口_Supplier接口

    常用函数式接口 JDK提供了大量常用的函数式接口以丰富Lambda的典型使用场景,它们主要在java.util.function 包中被提供. 下面是最简单的几个接口及使用示例. Supplier接口 ...

  3. java socket接口文档_Java进阶 - 网络编程、Socket、函数式接口、常用的函数式接口...

    1.网络通信协议 网络通信协议:通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信.这就好比在道路中行驶的汽车一定要遵守交通规则一样,协议中对数据的传输格式.传输速率.传输步骤 ...

  4. Java高级:新特性:lambda 函数式接口 方法引用 StreamAPI Optional类

    package com.atguigu.java1;import org.junit.Test;import java.util.Comparator;/*** Lambda表达式使用举例:** @a ...

  5. 常用的函数式接口_Consumer接口

    Consumer接口 java.util.function.Consumer<T> 接口则正好与Supplier接口相反,它不是生产一个数据,而是消费一个数据,其数据类型由泛型决定. 抽象 ...

  6. 常用的函数式接口_Supplier接口练习_求数组元素最大值

    求数组元素最大值 题目 使用Supplier 接口作为方法参数类型,通过Lambda表达式求出int数组中的最大值.提示:接口的泛型请使用java.lang.Integer 类. 解答 package ...

  7. Java8新特性学习(lambda,函数式接口,stream,Optional)

    一. Lambda Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风格,使Jav ...

  8. 常用的函数式接口FunctionInterface

    常见的四类函数式接口 Supplier 生产者, 返回一个指定类型的数据 有且只有一个方法T get();不需要参数,返回指定T类型数据 package com.qfedu.c_supplier;im ...

  9. 常用的函数式接口--Consumer接口

    Consumer java.util.function.Consumer 接口刚好和Supplier接口相反,它不是用来生产一个数据,而是消费一个数据 数据的类型由泛型来指定 accept方法 意思就 ...

最新文章

  1. 医院挂号设计源代码_锡盟蒙医医院设立智慧导诊系统服务患者
  2. 计算机到计算机 临时网络,电脑如何设置临时网络
  3. 部分视图传viewbag_无法在ASP.NET MVC3的部分视图中访问ViewBag
  4. 小辣椒p60手机怎么样_奇葩对决!3600元的格力手机与3599元的小辣椒V19,谁更强?...
  5. sourcetree,创建工作流报错:Fatal: Not a gitflow-enabled repo yet. Please run 'git flow init' first.-》解决办法...
  6. 二分图匹配--匈牙利算法
  7. 西南科技大学研究生计算机,我们毕业啦……西南科技大学2020研究生毕业记!...
  8. git的一些简单使用
  9. jts116_JTS T 116-2019水运建设工程概算预算编制规定.pdf
  10. linux 内核 内存管理 初始化 页表
  11. 使用c语言实现数组连接
  12. EXCEL TIPS From Webs
  13. 程序员常用1500英语单词
  14. 2022祥云杯crypto部分
  15. IT 工程师长期保住饭碗的一些建议
  16. 幼儿园故事导入语案例_幼儿园讲故事的教案10篇
  17. qq空间java版_Java版 QQ空间自动登录无需拷贝cookie一天抓取30WQQ说说数据流程分析【转】...
  18. 87.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其他*号全部删除。在编写函数时,不得使用C语言提供的字符串函数。
  19. irc 开源软件_前4个开源IRC客户端
  20. 王者荣耀扫码登录源码

热门文章

  1. 如何优化冷启动的时间
  2. 使用Photoshop实现雪花飘落的效果
  3. Minecraft TrMenu 菜单插件的JS动作高级用法
  4. 【互联网企业名称由来系列】四:网易
  5. 关于 AWS IAM Role 的最佳实践
  6. 轻量级的搜索引擎MeiliSearch
  7. 不想知道合并音频视频软件有哪些吗
  8. 计算机图形学实验教程,计算机图形学实验
  9. 最新仿新版趣味网视频文章问答综合网站源码+帝国内核
  10. python 打开电脑摄像头拍照保存