Lambda表达式
函数式接口
方法引用
构造器引用
Stream API
Optional类
默认方法
静态方法
高阶函数
闭包
惰性求值
并行流
Collectors类
Predicate接口
Function接口
Consumer接口
Supplier接口
BiFunction接口
UnaryOperator接口
BinaryOperator接口
解释
Lambda表达式:
用法:用于简化匿名内部类的写法,提供简洁的语法来定义单方法接口的实现。
示例:
(parameters) -> expression (parameters) -> { statements; }
函数式接口:
用法:接口中只有一个抽象方法,可以使用Lambda表达式或方法引用来实现。
示例:
@FunctionalInterface public interface MyFunctionalInterface { void execute(); }
方法引用:
用法:使用现有的方法来实现函数式接口的抽象方法。
示例:
ClassName::methodName instance::methodName
构造器引用:
用法:使用构造器来实现函数式接口的抽象方法。
示例:
ClassName::new
Stream API:
用法:用于处理集合数据的序列化操作,支持链式调用和并行处理。
示例:
List<String> list = Arrays.asList("a", "b", "c"); list.stream().filter(s -> s.startsWith("a")).collect(Collectors.toList());
Optional类:
用法:用于避免
null
值,提供了一种优雅的方式来处理可能为空的值。示例:
Optional<String> optional = Optional.of("value"); optional.ifPresent(System.out::println);
默认方法:
用法:接口中可以包含带有实现的方法,允许接口在不破坏现有实现的情况下扩展。
示例:
public interface MyInterface { default void defaultMethod() { System.out.println("Default method"); } }
静态方法:
用法:接口中可以包含静态方法,提供与接口相关的工具方法。
示例:
public interface MyInterface { static void staticMethod() { System.out.println("Static method"); } }
高阶函数:
用法:可以接收其他函数作为参数或返回值的函数。
示例:
public static void highOrderFunction(Consumer<String> consumer) { consumer.accept("Hello"); }
闭包:
用法:Lambda表达式或匿名类可以捕获并使用其外部作用域中的变量。
示例:
String message = "Hello"; Runnable r = () -> System.out.println(message);
惰性求值:
用法:Stream操作是惰性求值的,只有在终端操作时才会执行。
示例:
Stream<String> stream = list.stream().filter(s -> s.startsWith("a"));
并行流:
用法:通过并行处理提高Stream操作的性能。
示例:
list.parallelStream().forEach(System.out::println);
Collectors类:
用法:提供了各种预定义的收集器实现,用于将Stream的结果收集到不同类型的集合中。
示例:
List<String> result = stream.collect(Collectors.toList());
Predicate接口:
用法:用于定义一个接受一个参数并返回布尔值的函数。
示例:
Predicate<String> predicate = s -> s.isEmpty();
Function接口:
用法:用于定义一个接受一个参数并返回一个结果的函数。
示例:
Function<String, Integer> function = s -> s.length();
Consumer接口:
用法:用于定义一个接受一个参数并执行某些操作的函数。
示例:
Consumer<String> consumer = s -> System.out.println(s);
Supplier接口:
用法:用于定义一个不接受参数但返回一个结果的函数。
示例:
Supplier<String> supplier = () -> "Hello";
BiFunction接口:
用法:用于定义一个接受两个参数并返回一个结果的函数。
示例:
BiFunction<String, String, Integer> biFunction = (s1, s2) -> s1.length() + s2.length();
UnaryOperator接口:
用法:用于定义一个接受一个参数并返回同类型结果的函数。
示例:
UnaryOperator<String> unaryOperator = s -> s.toUpperCase();
BinaryOperator接口:
用法:用于定义一个接受两个参数并返回同类型结果的函数。
示例:
BinaryOperator<Integer> binaryOperator = (a, b) -> a + b;