首页 > 图灵资讯 > java面试题>正文
什么是Lambda表达式?请举例说明
2024-08-31 13:20:32
什么是Lambda表达式?
Lambda表达式是一种简洁的方式来表示一个可以传递的匿名函数(没有名字的函数)。在Java中,Lambda表达式主要用来简化代码,特别是在处理集合和流(Streams)的时候。它可以让代码更简洁、更易读。
Lambda表达式的基本语法
Lambda表达式的基本语法如下:
(parameters) -> expression
或者,如果有多条语句,可以使用大括号:
(parameters) -> { statements; }
举个简单的例子
假设我们有一个列表,里面有一些数字,我们想要对这些数字进行排序。以前,我们可能会这样写:
List<Integer> numbers = Arrays.asList(5, 3, 8, 1, 9); Collections.sort(numbers, new Comparator<Integer>() { @Override public int compare(Integer a, Integer b) { return a.compareTo(b); } });
使用Lambda表达式后,我们可以简化代码,变得更简洁:
List<Integer> numbers = Arrays.asList(5, 3, 8, 1, 9); numbers.sort((a, b) -> a.compareTo(b));
解释上面的例子
-
原来的代码:我们使用了一个匿名内部类
Comparator
来定义排序的规则,需要写很多样板代码。 -
使用Lambda表达式的代码:我们用
(a, b) -> a.compareTo(b)
来代替匿名内部类。这里的(a, b)
是参数列表,a.compareTo(b)
是要执行的表达式。
再举一个例子:过滤列表中的元素
假设我们有一个字符串列表,我们想要过滤出所有长度大于3的字符串。以前,我们可能会这样写:
List<string> strings = Arrays.asList("apple", "banana", "kiwi", "pear"); List<String> result = new ArrayList<>(); for (String s : strings) { if (s.length() > 3) { result.add(s); } }
使用Lambda表达式和Stream API后,我们可以这样写:
List<String> strings = Arrays.asList("apple", "banana", "kiwi", "pear"); List<String> result = strings.stream() .filter(s -> s.length() > 3) .collect(Collectors.toList());
解释上面的例子
-
原来的代码:我们使用了一个
for
循环和if
语句来过滤字符串。 -
使用Lambda表达式的代码:我们使用
strings.stream()
创建一个流,然后用filter
方法过滤出长度大于3的字符串。s -> s.length() > 3
是一个Lambda表达式,表示对每个字符串s
,如果它的长度大于3,就保留它。最后用collect(Collectors.toList())
将结果收集到一个新的列表中。