常用Lambda函数式接口
常用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函数式接口相关推荐
- Java 8 - 03 Lambda 函数式接口Predicate Consumer Function Supplier
文章目录 Pre Predicate 断言型函数式接口 Consumer 消费型函数式接口 Function 功能型函数式接口 Supplier 供给型函数式接口 小结 函数式接口如何处理异常信息 P ...
- 常用的函数式接口_Supplier接口
常用函数式接口 JDK提供了大量常用的函数式接口以丰富Lambda的典型使用场景,它们主要在java.util.function 包中被提供. 下面是最简单的几个接口及使用示例. Supplier接口 ...
- java socket接口文档_Java进阶 - 网络编程、Socket、函数式接口、常用的函数式接口...
1.网络通信协议 网络通信协议:通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信.这就好比在道路中行驶的汽车一定要遵守交通规则一样,协议中对数据的传输格式.传输速率.传输步骤 ...
- Java高级:新特性:lambda 函数式接口 方法引用 StreamAPI Optional类
package com.atguigu.java1;import org.junit.Test;import java.util.Comparator;/*** Lambda表达式使用举例:** @a ...
- 常用的函数式接口_Consumer接口
Consumer接口 java.util.function.Consumer<T> 接口则正好与Supplier接口相反,它不是生产一个数据,而是消费一个数据,其数据类型由泛型决定. 抽象 ...
- 常用的函数式接口_Supplier接口练习_求数组元素最大值
求数组元素最大值 题目 使用Supplier 接口作为方法参数类型,通过Lambda表达式求出int数组中的最大值.提示:接口的泛型请使用java.lang.Integer 类. 解答 package ...
- Java8新特性学习(lambda,函数式接口,stream,Optional)
一. Lambda Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风格,使Jav ...
- 常用的函数式接口FunctionInterface
常见的四类函数式接口 Supplier 生产者, 返回一个指定类型的数据 有且只有一个方法T get();不需要参数,返回指定T类型数据 package com.qfedu.c_supplier;im ...
- 常用的函数式接口--Consumer接口
Consumer java.util.function.Consumer 接口刚好和Supplier接口相反,它不是用来生产一个数据,而是消费一个数据 数据的类型由泛型来指定 accept方法 意思就 ...
最新文章
- 医院挂号设计源代码_锡盟蒙医医院设立智慧导诊系统服务患者
- 计算机到计算机 临时网络,电脑如何设置临时网络
- 部分视图传viewbag_无法在ASP.NET MVC3的部分视图中访问ViewBag
- 小辣椒p60手机怎么样_奇葩对决!3600元的格力手机与3599元的小辣椒V19,谁更强?...
- sourcetree,创建工作流报错:Fatal: Not a gitflow-enabled repo yet. Please run 'git flow init' first.-》解决办法...
- 二分图匹配--匈牙利算法
- 西南科技大学研究生计算机,我们毕业啦……西南科技大学2020研究生毕业记!...
- git的一些简单使用
- jts116_JTS T 116-2019水运建设工程概算预算编制规定.pdf
- linux 内核 内存管理 初始化 页表
- 使用c语言实现数组连接
- EXCEL TIPS From Webs
- 程序员常用1500英语单词
- 2022祥云杯crypto部分
- IT 工程师长期保住饭碗的一些建议
- 幼儿园故事导入语案例_幼儿园讲故事的教案10篇
- qq空间java版_Java版 QQ空间自动登录无需拷贝cookie一天抓取30WQQ说说数据流程分析【转】...
- 87.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其他*号全部删除。在编写函数时,不得使用C语言提供的字符串函数。
- irc 开源软件_前4个开源IRC客户端
- 王者荣耀扫码登录源码