package com.brianway.learning.java8.lambda; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; /** * Lambda实践: 环绕执行模式 * 1. 行为参数化 * 2. 使用函数式接口来传递行为 * 3. 执行一个行为 * 4. 传递 Lambda */ public class ExecuteAround { private static final String RESOURCE_ROOT = ExecuteAround.class .getResource("/").getPath() + "/data-lambda.txt"; public static void main(String... args) throws IOException { // method we want to refactor to make more flexible String result = processFileLimited(); System.out.println(result); System.out.println("---"); String oneLine = processFile(BufferedReader::readLine); System.out.println(oneLine); String twoLines = processFile((BufferedReader b) -> b.readLine() + b.readLine()); System.out.println(twoLines); } public static String processFileLimited() throws IOException { try (BufferedReader br = new BufferedReader(new FileReader(RESOURCE_ROOT))) { return br.readLine(); } } public static String processFile(BufferedReaderProcessor p) throws IOException { try (BufferedReader br = new BufferedReader(new FileReader(RESOURCE_ROOT))) { return p.process(br); } } @FunctionalInterface public interface BufferedReaderProcessor { String process(BufferedReader b) throws IOException; } }