前言Java函数式编程,是一种强大的编程范式,能够让你的代码更加简洁,优雅。Java 8 引入了函数式编程的支持,其中Lambda表达式和函数式接口是函数式编程的两个重要概念。在本篇文章中,我们将会详细介绍Java函数式编程以及常用的函数式接口。
Lambda表达式是一种匿名函数,可以理解为一段可以传递的代码。在 Java 中,Lambda 表达式可以替代只有一个抽象方法的接口。下面是一个Lambda表达式的例子:
() -> System.out.println("Hello World")
其中,左侧括号内是Lambda表达式的参数列表(如果没有参数,则为空),箭头“->”将 Lambda 表达式的参数列表和表达式主体分隔开,右侧则是Lambda表达式的主体(也就是Lambda表达式要执行的代码块)。Lambda表达式是使用编写函数式接口的简便方法。
函数式接口是指仅包含一个抽象方法的接口。在 Java 中,函数式接口可以使用Lambda表达式来实现,从而实现函数式编程。Java提供了一些常用的函数式接口,如Function、Consumer、Predicate、Supplier等。
public interface Function<T, R> {
R apply(T t);
}
Function接口接受一个参数并返回结果。我们可以使用andThen方法来将多个函数串联起来,进行组合操作。示例代码:
Function<Integer, String> intToString = Object::toString;
Function<String, String> quote = s -> "'" + s + "'";
Function<Integer, String> quoteIntToString = intToString.andThen(quote);
String result = quoteIntToString.apply(123);
System.out.println(result);
public interface Consumer<T> {
void accept(T t);
}
Consumer接口接受一个参数,但没有返回值。我们可以使用andThen方法来将多个Consumer组合起来,进行链式操作。示例代码:
List<String> list = Arrays.asList("a", "b", "c");
Consumer<String> print = System.out::print;
Consumer<String> println = System.out::println;
list.forEach(print.andThen(println));
public interface Predicate<T> {
boolean test(T t);
}
Predicate接口接受一个参数,返回一个布尔值。我们可以使用and、or、negate方法将多个Predicate组合起来,进行复合逻辑的判断。示例代码:
List<String> list = Arrays.asList("cat", "dog", "bird", "lion", "tiger");
Predicate<String> startsWithC = s -> s.startsWith("c");
Predicate<String> endsWithR = s -> s.endsWith("r");
Predicate<String> containsO = s -> s.contains("o");
list.stream()
.filter(startsWithC.and(endsWithR).or(containsO))
.forEach(System.out::println);
public interface Supplier<T> {
T get();
}
Supplier接口不接受任何参数,返回一个结果。我们可以使用get方法来获取结果。示例代码:
Supplier<String> helloSupplier = () -> "Hello";
System.out.println(helloSupplier.get() + " world");
方法引用是一种更简洁的Lambda表达式,可以通过方法名称来引用已经存在的方法。方法引用通过 ::
操作符将方法名与对象或类名分隔开来表示。
下面是一些方法引用的例子:
Function<String, Integer> strToInt = Integer::parseInt;
Supplier<Date> newDate = Date::new;
Consumer<String> print = System.out::print;
在本篇文章中,我们介绍了Java函数式编程以及常用的函数式接口。Lambda表达式和函数式接口是函数式编程的两个重要概念,可以让代码更加简洁和灵活。Java提供了一些常用的函数式接口,如Function、Consumer、Predicate、Supplier等,可以通过方法引用更加简洁地实现函数式编程。使用函数式编程,可以让你的代码更加优雅,简洁。