本文共 2770 字,大约阅读时间需要 9 分钟。
函数式编程思想强调“做什么”而不是“怎么做”。与面向对象编程相比,函数式编程更注重结果的输出,而不是对象的形式。
在Java中,创建Runnable接口的实现类并传递给Thread类的start方法虽然可行,但代码冗余。为了简化代码,可以使用匿名内部类或Lambda表达式。
public class Demo01Runnable { public static void main(String[] args) { // 创建Runnable接口的实现类对象 RunnableImpl run = new RunnableImpl(); // 创建Thread类对象,构造方法中传递Runnable接口的实现类 Thread t = new Thread(run); // 调用start方法开启新线程 t.start(); // 使用匿名内部类实现Runnable Runnable r = new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName() + " 新线程创建了"); } }; new Thread(r).start(); }} 函数式编程的核心是将任务的执行结果传递给系统,而不是关注任务的具体实现方式。
从北京到上海可以选择高铁、飞机等不同方式,核心是到达终点,而不是选择什么方式。
Java 8的Lambda表达式为我们提供了更灵活的方式来实现函数式编程。
Lambda表达式可以显著简化代码,例如:
public class demoRunnable { public static void main(String[] args) { Runnable r = () -> { System.out.println(Thread.currentThread().getName() + " 新线程创建了"); }; new Thread(r).start(); }} Lambda表达式的格式为:
(参数列表) -> { 业务逻辑代码 } 创建一个Cook接口:
public interface Cook { void makeFood();} 使用Lambda实现:
public class demoCook { public static void main(String[] args) { invokeCook(() -> { System.out.println("吃饭了"); }); } public static void invokeCook(Cook cook) { cook.makeFood(); }} 对Person数组进行排序:
public class demoPerson { public static void main(String[] args) { Person[] arr = { new Person("a", 3), new Person("b", 1), new Person("c", 1) }; Arrays.sort(arr, (o1, o2) -> o1.getAge() - o2.getAge()); for (Person p : arr) { System.out.println(p); } }} 创建一个Calculator接口:
public interface Calculator { int calc(int a, int b);} 使用Lambda实现:
public class demoCalculator { public static void main(String[] args) { invokeCalc(10, 30, (a, b) -> a + b); } public static void invokeCalc(int a, int b, Calculator c) { int sum = c.calc(a, b); System.out.println(sum); }} Lambda表达式可以省略以下内容:
示例:
invokeCook(() -> System.out.println("吃饭了"));invokeCalc(120, 130, (a, b) -> a + b); 通过合理使用Lambda表达式,可以显著简化代码,同时提升代码的可读性和维护性。
转载地址:http://xgrwz.baihongyu.com/