作为一个前端同学,今天惊叹的发现,原来 java 也可以使用函数式编程,赶紧来看看怎么玩
简介
当Java 8引入Lambda表达式和函数式编程特性时,它开启了一个全新的编程范式。这些功能使得Java语言更加现代、灵活,并支持更为函数式的编程方式。在这篇博客中,我们将深入探讨Java中的Lambda表达式和函数式编程。
语法
(parameters) -> expression
parameters表示参数列表,expression表示表达式。你要是前端的话看一眼就懂了,接下来我整一些示例给大家看看
示例:简单
hello world
new Thread(() -> System.out.println("Hello, Lambda!")).start();
相加
// 自定义函数式接口
interface MyFunction {void apply(int x, int y);
}// 使用Lambda表达式实现
MyFunction add = (x, y) -> System.out.println("Sum: " + (x + y));
示例:筛选年龄大于 25 的人员
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;class Scratch {public static void main(String[] args) {List<Person> people = new ArrayList<>();people.add(new Person("Alice", 25));people.add(new Person("Bob", 30));people.add(new Person("Charlie", 22));people.add(new Person("David", 35));// 使用 Lambda 表达式筛选年龄大于 25 的人员List<Person> filteredList = filterPeople(people, person -> person.getAge() > 25);System.out.println(filteredList);}// 使用函数式接口 Predicate 进行筛选private static List<Person> filterPeople(List<Person> people, Predicate<Person> predicate) {List<Person> filteredList = new ArrayList<>();for (Person person : people) {if (predicate.test(person)) {filteredList.add(person);}}return filteredList;}
}class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}
结果
[Person{name='Bob', age=30}, Person{name='David', age=35}]
Lambda表达式与前端箭头函数的对比
// Lambda表达式
Runnable runnableLambda = () -> System.out.println("Hello, Lambda!");
// 箭头函数
const greet = () => console.log("Hello, Arrow Function!");
基本就是箭头的样式不一样
函数式编程的优势
-
代码简洁
Lambda表达式让代码变得更加紧凑,消除了冗长的语法,提高了代码的可读性。 -
增强可读性
函数式编程强调表达式的含义,Lambda表达式使得代码逻辑更为清晰,提高可读性。 -
更灵活的编程方式
Lambda表达式支持函数作为一等公民,使得高阶函数的编写变得更为灵活。