Java 8 最大的改变莫过于lambda表达式,不过你真的了解lambda么?
我经常看到同事写类似于如下的代码:
forEatch(list,element-> check(element));
这种写法无论从代码规范还是编程风格上讲一点问题都没有,不过要从运行效率去考虑,你会发现jvm首先会创建一个函数式接口的实例,这个实例再去调用check方法。虽然创建一个函数式接口实例不会消耗太多的内存也不会耗费多少时间,但如果这个系统足够庞大,那么对系统性能就会有所影响。那我们如何优化呢?
forEatch(list,this::check);
Java中的双冒号(::)是方法引用表达式,这种写法不再去创建一个函数式接口的实例,而直接把check方法传入。这种写法虽然提高了运行效率,但代码的可读性有所降低。