Java Lambda表达式的使用?
Java Lambda表达式是Java 8引入的一个新特性,它是一种可以传递一段代码作为参数的函数式编程方法。传统的Java编程中,我们需要创建匿名内部类来实现某种操作,而Lambda表达式可以让代码显得更加简洁、易读、易维护,同时也可以使我们更加专注于业务逻辑,而不必太过关注底层技术实现。
Lambda表达式的语法
Lambda表达式的语法很简单,可以用一行代码表示,对于只有一个参数的方法可以省略小括号,对于只有一个语句的方法可以省略大括号和return语句,如下所示:
(参数)-> {方法体}
如果没有参数,可以直接使用空括号表示:
() -> {方法体}
如果方法体只有一条语句可以省略大括号:
(参数)-> 语句
如:
x -> x+1;
Lambda表达式的使用实例
Lambda表达式适用于Java的集合操作中。我们可以将Lambda表达式用于Java集合下的一些操作,如过滤、映射、排序等,让我们来看一些用例:
过滤:对于集合中的元素进行过滤查找,以满足特定的条件。在Java 8 之前我们可能会用一个常见的Java 代码实现方式来完成:
List<String> list = new ArrayList<>();
for(String s : list){
if(s.startsWith("a")){
System.out.println(s);
}
}
这样我们就可以输出所有以字母a开头的字符串。而使用Lambda 表达式来完成这个例子:
List<String> list = new ArrayList<>();
list.stream().filter(s -> s.startsWith("a")).forEach(System.out::println);
这个就简短清晰多了。首先,我们使用stream()方法得到一个集合的流,然后用filter()方法对集合进行过滤。其中,Java 8引入的Stream API提供了操作集合和数组的流式操作,filter() 方法可以筛选集合中符合条件的元素。最后一个forEach()方法则是一种对Java中集合元素进行遍历的方法。
映射:对集合中的元素进行转换,让元素根据指定方法生成不同的值。Java 8 之前实现的代码如下:
List<Integer> list = new ArrayList<>();
for(String s : list){
list.add(s.length());
}
for(Integer i : list){
System.out.println(i);
}
而采用Lambda表达式,则为:
List<Integer> list = new ArrayList<>();
list.stream().map(s -> s.length()).forEach(System.out::println);
其中,map()方法是将一个集合逐个按照传入的Lambda表达式进行转换,然后返回一个新的集合,这里返回的就是字符串长度,最后使用一个forEach()方法进行遍历。
排序:对集合中的元素进行排序。Java 8 之前我们的一个代码实现方式如下:
List<String> list = new ArrayList<>();
Collections.sort(list, new Comparator<String>(){
public int compare(String s1, String s2){
return s1.compareTo(s2);
}
});
而采用Lambda表达式,就可以更加简单:
List<String> list = new ArrayList<>();
list.sort((s1, s2)->s1.compareTo(s2));
当然,除了集合操作之外,Lambda表达式还可以用于多线程、GUI界面开发等场合,使得代码风格更加清晰、简洁。不过,对于Lambda表达式的正确性和性能影响等方面我们也需要谨慎使用。
