Java 8 内置四大核心函数式接口
1、四大核心函数式接口
接口类型 | 表现形式 | 实现方法 | 说明 |
消费性接口 | Consumer<T> | void accept<T t> | 参数为 t,无返回值 |
供给型接口 | Supplier<T> | T get() | 无参数,返回值类型为 T |
函数型接口 | Function<T,R> | R apply(T t) | 参数为 t,返回值类型为 R |
断言型接口 | Predicate<T> | Boolean test(T t) | 参数为 t,返回值类型为 Boolean |
2、四大核心函数接口实践
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | public class LambdaDemo { // 1、消费性接口测试 @Test public void testLambda01() { someThingHappy( "summer" , (x) -> { String str = x; System.out.println( "某个人喜欢大保健,他觉得只有大保健能让他快乐,这个人就是 " + x); }); } // 2、供给型接口测试 @Test public void testLambda02() { List<String> strEqualTo5 = getStrEqualTo5(() -> { String[] strArr = { "summer" , "erico" , "puff" , "defire" , "hank" }; List<String> list = Arrays.asList(strArr); ArrayList<String> strList = new ArrayList<>(); for (String str : list) { if (str.length() == 4 ) { strList.add(str); } } return strList; }); System.out.println(strEqualTo5); } // 3、函数型接口测试 @Test public void testLambda03() { Integer index = getIndexFromArray((x) -> { int i = 0 ; for ( int j = 0 ; j < x.length; j++) { if (Objects.equals(x[j], "summer" )) { i = j; } } return i; }); System.out.println(index); } // 4、断言型接口测试 @Test public void testLambda04() { Boolean isEricoExists = checkUser((x) -> { Boolean flag = false ; for (String str : x) { if (Objects.equals(str, "erico" )) { flag = true ; } } return flag; }); System.out.println(isEricoExists); } // 需求 1、输出一段快乐的话 // Consumer<T> : 消费性接口 // void accept(T t) public void someThingHappy(String userName, Consumer<String> consumer) { consumer.accept(userName); } // 需求 2、返回一个集合,集合中存放长度等于 5 的字符串 // Supplier<T> : 供给型接口 // T get(); public List<String> getStrEqualTo5(Supplier<List<String>> supplier) { return supplier.get(); } // 需求 3、筛选出名称为 summer 的用户,并返回其在数组中的索引位置 // Function<T,R> // R apply(T t) public Integer getIndexFromArray(Function<String[], Integer> function) { String[] strArr = { "erico" , "puff" , "defire" , "hank" , "summer" }; return function.apply(strArr); } // 需求 4、判断指定的集合中是否存在一个叫 erico 的人 // Predicate<T> // Boolean test<T> public Boolean checkUser(Predicate<List<String>> predicate) { String[] strArr = { "erico" , "puff" , "defire" , "hank" , "summer" }; List<String> listStr = Arrays.asList(strArr); return predicate.test(listStr); } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?