java8 lambda表达式

摘自http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html

Lambda表达式


匿名类的一个问题是,如果您的匿名类的实现非常简单,例如仅包含一个方法的接口,则匿名类的语法可能看起来很笨重且不清楚。在这些情况下,您通常会尝试将功能作为参数传递给另一种方法,例如当有人点击按钮时应该采取什么措施。Lambda表达式使您能够执行此操作,将功能视为方法参数或将代码作为数据。

上一节“ 匿名类”介绍如何实现基类而不给它一个名称。虽然这通常比命名类更简洁,对于只有一个方法的类,即使是匿名类似乎有点过于繁琐。Lambda表达式可以更紧凑地表达单一方法类的实例。

本节包括以下主题:

Lambda表达式的理想用例
	方法1:创建搜索匹配一个特征的成员的方法
	方法2:创建更广泛的搜索方法
	方法3:在本地类中指定搜索条件代码
	方法4:在匿名类中指定搜索条件代码
	方法5:使用Lambda表达式指定搜索条件代码
	方法6:使用带有Lambda表达式的标准功能接口
	方法7:在整个应用程序中使用Lambda表达式
	方法8:更广泛地使用泛型
	方法9:使用接受Lambda表达式作为参数的聚合操作
GUI应用程序中的Lambda表达式
Lambda表达式的语法
访问封闭范围的局部变量
目标类型
	目标类型和方法参数
序列化

Lambda表达式的理想用例


假设您正在创建一个社交网络应用程序。您希望创建一个功能,使管理员能够对符合特定条件的社交网络应用程序的成员执行任何类型的操作(例如发送消息)。下表详细描述了这种用例:

领域 描述
名称 对所选成员执行操作
主演员 管理员
前提条件 管理员已登录到系统。
后置条件 仅对符合指定条件的成员执行操作。
主要成功案例 1.管理员指定执行某个操作的成员的标准。2.管理员指定对所选成员执行的操作。3.管理员选择提交按钮。4.系统查找与指定条件匹配的所有成员。5.系统对所有匹配的成员执行指定的操作。
扩展 1A。管理员可以选择在指定要执行的操作之前或选择提交按钮之前预览符合指定条件的成员。
发生频率 白天很多次

假设这个社交网络应用程序的成员由以下Person类代表 :

	public class Person {

	    public enum Sex {
	        MALE, FEMALE
	    }

	    String name;
	    LocalDate birthday;
	    Sex gender;
	    String emailAddress;

	    public int getAge() {
	        // ...
	    }

	    public void printPerson() {
	        // ...
	    }
	}