使用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) {
}
}

浙公网安备 33010602011771号