Lambda表达式的使用可以很大程度上减少代码的数量,但是阅读起来并不是怎么方便,如果是长期查看lambda代码可能还好一点!!!使用lambda表达式减少的代码主要是简化匿名内部类使用的代码的数量,Lambda表达式的书写方式:
(参数) -> 表达式
(参数) -> 语句
(参数) -> { 语句 }
结合上面的书写模式下面来看几个例子:
正常的java表达式:
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.print("Hello Lambda!!\n");
}
}).start();
Lambda表达式:
new Thread(()->System.out.print("Hello Lambda!!\n")).start();
正常的java表达式:
filter(languages,new Predicate<String>() {
@Override
public boolean test(String t) {
return true;
}
});
private static void filter(List<String> names, Predicate<String> condition) {
for(String name: names) {
if(condition.test(name)) {
System.out.println(name + " ");
}
}
}
Lambda表达式:
filter(languages, (str)->true);
private static void filter(List<String> names, Predicate<String> condition) {
for(String name: names) {
if(condition.test(name)) {
System.out.println(name + " ");
}
}
}
正常的java表达式:
List<Integer> costBeforeTax = Arrays.asList(100, 200, 300, 400, 500,600);
Stream<Double> s = costBeforeTax.stream().map(new Function<Integer, Double>() {
@Override
public Double apply(Integer t) {
return t*1.12;
}
});
Optional<Double> o = s.reduce(new BinaryOperator<Double>() {
@Override
public Double apply(Double arg0, Double arg1) {
// TODO Auto-generated method stub
System.out.println(arg0+" + "+arg1);
return arg0+arg1;
}
});
System.out.println("2222222222 Total : " + o.get());
Lambda表达式:
double d = costBeforeTax.stream().map((cc)->cc*1.12).reduce((x,y)->x+y).get();
System.out.println("1111111111 Total : " + d);
通过对比可以很明显看到,使用lambda表达式可以写出更加简短的代码,但是不是很适合阅读,特别是对于一些不熟悉的方法,比如reduce,如果没有接触到这个方法,仅仅只看这个Lambda表达式根本看不出什么,而且也看不出reduce方法的输入参数类型和返回结果类型!!
个人觉得,在使用任何一种语言或者新的方式编程都是一个熟能生巧的过程,对于Lambda表达式而言,只要你勤加练习,估计你以后在使用到匿名内部类的时候就会自然而然的使用Lambda表达来装逼编写代码了!!
在使用Lambda时,你可能需要对一些接口的回调特别熟悉,不然都不清楚参数的意义,还写个毛线呀,个人觉得你不会Lambda表达式也没有什么关系(难道使用Lambda表达式还可以优化程序执行速度吗?没听有人这么说呀,所以这玩意对我而言纯属装逼用的)!!
关于Lambda表达式就说这么到,有兴趣的朋友可以以关注我,遇到问题大家一起讨论一下!!