之前一直有听说过Lambda表达式,但是一直也没有使用过,最近学习了一下,感觉还不错,简单方便,把原来需要很多行才能实现的功能可以直接一行实现。不过最好也不要盲目的使用,并不是所有情况都适合用它!
引用一段大佬的话——超过3行的逻辑就不适用Lambda表达式了。虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能。本人建议不要乱用,因为这就和某些很高级的黑客写的代码一样,简洁,难懂,难以调试,维护人员想骂娘。
接下来举几个基本的例子:
// 1. 不需要参数,返回值为 3
() -> 3
// 2. 接收一个数字类型的参数,返回它乘以2的值
x -> 2 * x
// 3. 接受2个数字类型参数,并返回他们的差值
(x, y) -> x – y
// 4. 接收2个int型整数,返回他们的积
(int x, int y) -> x * y
// 5. 接受一个 String 类型的对象,在控制台打印,不返回任何值
(String a) -> System.out.print(a)
然后再举几个用Lambda表达式遍历List集合的例子,多行操作需要在{}中进行,这也是最常用的,如:
package com.sixmac.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class LambdaTest {
public static void main(String[] args) {
List<String> list = listAdd();
for (String s:list) { //遍历集合的一般写法
System.out.println(s);
}
//----------------------------这些方法遍历出来的值都相同---------------------------------------------------------
//这里的l只是一个参数
list.forEach(l -> System.out.println(l));//遍历集合的Lambda表达式写法
list.forEach(System.out::println);//等同于上面的写法
//如果要在Lambda表达式中进行多行代码的操作,需要在{}中进行,例如:
list.forEach(l->{
if(l.equals("XF1")){
System.out.println(l);
}
});
}
/**
* 创建一个list集合
* @return
*/
public static List<String> listAdd(){
List<String> list = new ArrayList<>();
for(int i=0;i<5;i++){
list.add("XF"+i);
}
return list;
}
}
如果要对Map集合进行遍历和操作,跟List其实大同小异,如:
package com.sixmac.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class LambdaTest {
public static void main(String[] args) {
Map<Integer, Integer> map = mapAdd();
//一般遍历map集合的写法
for (Map.Entry<Integer,Integer> entry:map.entrySet()) {
System.out.println("k:"+entry.getKey()+","+"v:"+entry.getValue());
}
//或者
for (Integer k: map.keySet()) {
System.out.println("k:"+k);
}
for (Integer v :map.values()) {
System.out.println("v:"+v);
}
//========================两种遍历的打印结果是相同的======================================
//用Lambda表达式遍历map集合的写法
//k和v是传进去的两个参数
map.forEach((k,v)-> System.out.println("k:"+k+","+"v"+v));
//如果想在遍历map的时候进行一些操作,需要在{}中进行,如:
map.forEach((k,v) -> {
v=v+2;
map.put(k,v);
System.out.println("k:"+k+","+"v:"+v);
});
}
/**
* 创建一个map集合
* @return
*/
public static Map<Integer,Integer> mapAdd(){
Map<Integer, Integer> map = new HashMap<>();
for(int i=0;i<5;i++){
map.put(i,i);
}
return map;
}
}
这些就是Lambda表达式的基本用法了,的确很炫酷,逼格高,不懂的人看到肯定感觉是不明觉厉,当然还有一些其他的功能,大家感兴趣的话可以自己多研究研究~
The end!!!