news 2026/6/17 9:18:12

Java Lambda 表达式常用函数和示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java Lambda 表达式常用函数和示例

Java 中的 lambda 表达式是 Java 8 引入的一项重要特性,它简化了函数式编程的实现方式。Lambda 表达式通常与java.util.function包中的函数式接口结合使用,这些接口为常见的操作提供了标准化的函数定义


常用函数式接口及示例

1.Function<T, R>

表示接受一个输入参数并返回结果的函数。

示例:将字符串转换为大写
import java.util.function.Function; public class FunctionExample { public static void main(String[] args) { Function<String, String> toUpperCase = s -> s.toUpperCase(); System.out.println(toUpperCase.apply("hello")); // 输出: HELLO } }
示例:计算字符串长度
Function<String, Integer> stringLength = s -> s.length(); System.out.println(stringLength.apply("lambda")); // 输出: 6

2.Predicate<T>

表示一个布尔值函数,用于判断某个条件是否成立。

示例:检查数字是否为偶数
import java.util.function.Predicate; public class PredicateExample { public static void main(String[] args) { Predicate<Integer> isEven = n -> n % 2 == 0; System.out.println(isEven.test(4)); // 输出: true System.out.println(isEven.test(5)); // 输出: false } }
示例:检查字符串是否为空
Predicate<String> isEmpty = s -> s.isEmpty(); System.out.println(isEmpty.test("")); // 输出: true System.out.println(isEmpty.test("abc")); // 输出: false

3.Consumer<T>

表示接受一个输入参数且不返回结果的操作。

示例:打印字符串
import java.util.function.Consumer; public class ConsumerExample { public static void main(String[] args) { Consumer<String> printMessage = message -> System.out.println(message); printMessage.accept("Hello, Lambda!"); // 输出: Hello, Lambda! } }
示例:遍历集合并打印元素
import java.util.Arrays; import java.util.List; import java.util.function.Consumer; public class ListConsumer { public static void main(String[] args) { List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); names.forEach(name -> System.out.println(name)); } }

4.Supplier<T>

表示无参数但返回结果的提供者。

示例:生成随机数
import java.util.function.Supplier; import java.util.Random; public class SupplierExample { public static void main(String[] args) { Supplier<Integer> randomNum = () -> new Random().nextInt(100); System.out.println(randomNum.get()); // 输出: 0 到 99 的随机整数 } }
示例:返回默认字符串
Supplier<String> defaultGreeting = () -> "Hello, World!"; System.out.println(defaultGreeting.get()); // 输出: Hello, World!

5.BiFunction<T, U, R>

表示接受两个输入参数并返回结果的函数。

示例:求两个数的和
import java.util.function.BiFunction; public class BiFunctionExample { public static void main(String[] args) { BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b; System.out.println(add.apply(3, 5)); // 输出: 8 } }
示例:连接两个字符串
BiFunction<String, String, String> concatenate = (s1, s2) -> s1 + s2; System.out.println(concatenate.apply("Java", "Lambda")); // 输出: JavaLambda

6.UnaryOperator<T>

Function<T, T>的子接口,表示接受一个参数并返回相同类型的结果。

示例:对整数进行平方运算
import java.util.function.UnaryOperator; public class UnaryOperatorExample { public static void main(String[] args) { UnaryOperator<Integer> square = x -> x * x; System.out.println(square.apply(4)); // 输出: 16 } }

7.BinaryOperator<T>

BiFunction<T, T, T>的子接口,表示接受两个相同类型的参数并返回相同类型的结果。

示例:找出两个数的最大值
import java.util.function.BinaryOperator; public class BinaryOperatorExample { public static void main(String[] args) { BinaryOperator<Integer> max = (a, b) -> a > b ? a : b; System.out.println(max.apply(10, 20)); // 输出: 20 } }

高级应用示例

使用 Lambda 表达式处理集合

过滤列表
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class FilterExample { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6); List<Integer> evenNumbers = numbers.stream() .filter(n -> n % 2 == 0) .collect(Collectors.toList()); System.out.println(evenNumbers); // 输出: [2, 4, 6] } }
映射列表
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class MapExample { public static void main(String[] args) { List<String> names = Arrays.asList("alice", "bob", "charlie"); List<String> upperCaseNames = names.stream() .map(name -> name.toUpperCase()) .collect(Collectors.toList()); System.out.println(upperCaseNames); // 输出: [ALICE, BOB, CHARLIE] } }
归约操作
import java.util.Arrays; import java.util.List; public class ReduceExample { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); int sum = numbers.stream() .reduce(0, (a, b) -> a + b); System.out.println(sum); // 输出: 15 } }

总结

Java 的 lambda 表达式极大地简化了函数式编程的实现,使得代码更加简洁、易读。通过java.util.function提供的各种函数式接口(如Function,Predicate,Consumer,Supplier,BiFunction,UnaryOperator,BinaryOperator),开发者可以轻松地编写出高效且富有表现力的代码。此外,结合 Java Stream API,lambda 表达式在集合处理方面展现了强大的功能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 3:36:27

工业级Prompt工程实战:Pre-train, Prompt, Predict三段式落地指南

1. 项目概述&#xff1a;这不是又一篇讲大模型的“概念科普”&#xff0c;而是一份我在工业级NLP项目里反复打磨出的实操路线图“Pre-train, Prompt, and Predict”——这六个单词&#xff0c;过去三年里我几乎每天都在团队晨会、模型评审、客户交付报告里看到它。但直到去年接…

作者头像 李华
网站建设 2026/6/14 3:36:30

遗传算法Python实战:100皇后问题从原理到可运行代码

1. 项目概述&#xff1a;从理论到可运行代码的遗传算法实战落地你有没有试过写完一个算法原理&#xff0c;却卡在“怎么让它真正跑起来”这一步&#xff1f;我做过太多次了。这篇不是那种泛泛而谈“遗传算法模拟自然进化”的科普文&#xff0c;而是带着你&#xff0c;把上一篇里…

作者头像 李华
网站建设 2026/6/14 4:00:22

AI落地核心:Fit for Purpose的五大检查点与七步落地法

1. 项目概述&#xff1a;当“能跑通”不等于“能用好”——一个被严重低估的AI落地基本功你有没有遇到过这样的情况&#xff1a;模型在测试集上AUC冲到0.92&#xff0c;团队庆贺完上线&#xff0c;结果业务方反馈“这玩意儿根本没法进流程”&#xff1f;或者用户抱怨&#xff1…

作者头像 李华
网站建设 2026/6/14 3:36:29

工业级遗传算法实操指南:动态架构与自适应调参

1. 这不是教科书里的遗传算法&#xff0c;而是我调试了73次后才敢写的实操指南“遗传算法”这四个字&#xff0c;听上去像生物课上讲DNA双螺旋时顺带提的一句术语&#xff0c;又像AI面试题里那个永远答不全的“请手推GA流程”。但真实情况是&#xff1a;我在工业缺陷检测项目里…

作者头像 李华
网站建设 2026/6/17 7:28:26

别再写if(bFlag==TRUE)了!C语言布尔判断的5个实战避坑指南与Linux内核写法

C语言布尔判断的5个实战避坑指南与Linux内核高级技巧在嵌入式开发和系统编程领域&#xff0c;C语言的布尔判断看似简单&#xff0c;却隐藏着许多容易忽视的陷阱。我曾见过一个线上故障&#xff0c;仅仅因为一个if(bFlag TRUE)的判断导致系统在特定条件下崩溃。本文将揭示这些陷…

作者头像 李华
网站建设 2026/6/14 3:45:25

AI客服平台进入破损售后场景,企业服务开始重视证据判断

破损售后是电商服务中很常见&#xff0c;也很容易引发争议的一类问题。顾客收到商品后发现外包装变形、商品裂痕、配件损坏、液体渗漏、书籍折角、家居磕碰等情况&#xff0c;通常会第一时间联系在线客服。对客服来说&#xff0c;这类问题不能只靠一句安抚解决&#xff0c;还需…

作者头像 李华