使用java Lambda写法

Lambda个人理解就是使用(能接收外部的什么类型)什么类型,返回什么类型 怎么做只是Lambda的写法

比如以下的例子就是 需要一个接收BufferedReader并返回String的Lambda的例子

既能读取一行记录br.ReaderLine();也能读取两行 br.ReaderLine()+br.ReaderLine();不同的只是行为.

1.何时使用:

当业务是环绕执行模式时,可以采用Lambda传递真正的行为。

2.如何使用:

1)定义 @FunctionalInterface 注解的接口,提供接受哪种类型为形参的抽象方法.

2)编写主体公共方法,包含环绕方法,这个公共方法的参数类型为接口类型.

3)主体方法中执行接口方法.

4)以上定以后后,在其他逻辑里使用Lambda表达式传递行为,Lambda表达式的参数类型是接口定义的参数类型

5)这里可能有个别扭的地方就是 ProcessFile(BufferedReaderProcessor p)的类型明明是BufferedReaderProcessor 接口类型,

但使用时Lambda里写的是接口中定义的方法的类型,没错它本身就是接口的参数类型.

其实,使用时的整个Lambda表达式就是BufferedReaderProcessor 的方法参数和行为。整体作为参数传递给ProcessFile(BufferedReaderProcessor p)

代码示例:

 

   1):

 @FunctionalInterface

public interface BufferedReaderProcessor {
String process(BufferedReader b) throws IOException;
}

2):
public static String processFile(BufferedReaderProcessor p) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) {
return p.process(br);
}
}
3):
static void main(String[] args) {
try {
//有的业务里只需要读一行
     String resultOne=processFile((BurreredReader br)->br.ReaderLine);
//有的业务里可能需要读两行
String result = processFile((BufferedReader br) -> br.readLine() + br.readLine());
//以上方式是最赞的,不是么?
} catch (Exception ex) {

}
}


posted @ 2017-02-23 14:57  jims u  阅读(641)  评论(0)    收藏  举报