Java函数式编程(五):闭包
很多开发人员都存在这种误解,认为使用lambda表达式会导致代码冗余,降低代码质量。我们把这两个实例分别传递给两次filter方法调用。checkIfStartsWith方法返回的Predicate对象和其它lambda表达式有些不同。它是在这个匿名函数的域外边的,Java找到了定义这个lambda表达式的域,并发现了这个变量letter。由于这个lambda表达式使用了它的定义域中的变量,这种情况也被称作闭包。标记成final后解决了这个问题,不过Java并不强迫我们一定要这么标记。这些例子都展示了lambda表达式带来的简洁性和可重用性。Predicate接受一个类型为T的参数,返回一个boolean值来代表它对应的判断条件的真假。像filter这类对元素进行筛选的方法都接收Predicate作为参数。它和只能返回boolean的Predicate相比要更加通用。
用户评论