Lambda表达式是Java8新引入的一种语法形式,可以用于简洁地定义匿名函数,常用于对集合进行筛选、映射等操作。下面将详细讲解Lambda表达式的使用及注意事项。
Lambda表达式的语法
Lambda表达式由三部分组成:参数列表、箭头符号和表达式或语句块。其基本格式为:
(参数列表) -> {表达式或语句块}
例如,下面是一个Lambda表达式的例子,将一个整数列表中所有大于10的数筛选出来:
List<Integer> numbers = Arrays.asList(1, 20, 5, 12, 9);
List<Integer> result = numbers.stream()
.filter(n -> n > 10)
.collect(Collectors.toList());
其中,Lambda表达式为n -> n > 10
,表示该函数接受一个参数n,返回一个布尔值表示n是否大于10。
Lambda表达式的注意事项
类型推断
Java编译器可以通过上下文自动推断Lambda表达式的参数类型和返回类型。例如,下面的Lambda表达式可以自动推断参数为字符串,返回值为字符串长度:
Function<String, Integer> len = s -> s.length();
变量捕获
Lambda表达式中可以访问所在作用域中的变量,这种访问方式称为变量捕获。例如,下面的Lambda表达式中访问了外部变量x:
int x = 10;
Predicate<Integer> greaterThanX = n -> n > x;
需要注意的是,如果Lambda表达式中捕获了某个外部变量,那么该变量必须是final或隐式final的。例如,下面的示例代码无法编译通过:
int x = 10;
x = 20; // 编译错误:变量 x 需要是 final 或 effectively final
Predicate<Integer> greaterThanX = n -> n > x;
方法引用
Lambda表达式中可以调用对象的方法或者静态方法,这种调用方式称为方法引用。例如,下面的Lambda表达式可以用方法引用的形式更加简洁:
Function<String, Integer> len = String::length;
Lambda表达式的示例
示例1:对列表进行排序
下面是一个排序示例,将一个字符串列表按照字符串长度进行排序:
List<String> words = Arrays.asList("apple", "banana", "orange", "pear");
words.sort((s1, s2) -> s1.length() - s2.length());
示例2:计算列表中数值的平均值
下面是一个计算平均值的示例,将一个整数列表中的数值累加起来并求平均值:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
double average = numbers.stream().mapToInt(Integer::intValue).average().getAsDouble();
其中,mapToInt(Integer::intValue)
表示将整数转换为对应的int值。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Lambda表达式的使用及注意事项 - Python技术站