Lambda 表达式是 Java 8 引入的一种新特性,它是一种简洁的表示能够传递的代码块。Lambda 表达式可以表示一个函数接口的实现。函数接口是只包含一个抽象方法的接口,例如 Runnable
、Comparator
或 Java 8 引入的 java.util.function
包中的接口。
(parameters) -> expression
或
(parameters) -> { statements; }
// 不带参数的Lambda表达式
Runnable r = () -> System.out.println("Hello Lambda!");
// 带一个参数的Lambda表达式
Consumer<String> consumer = (s) -> System.out.println(s);
// 带有两个参数和返回值的Lambda表达式
Comparator<Integer> comparator = (a, b) -> Integer.compare(a, b);
java.util.function
包中的函数式接口配合使用,例如 Predicate
、Function
、Consumer
、Supplier
、UnaryOperator
等。Stream 是 Java 8 中引入的一种新特性,它是一种用来处理集合数据的高级抽象。Stream 可以进行非常复杂的数据操作,例如过滤、排序、映射、归约等,能够更简洁、方便地进行集合操作。
filter
、map
、sorted
等),这些操作是懒执行的。forEach
、collect
、reduce
等),触发所有中间操作的执行。List<String> list = Arrays.asList("java", "c", "python", "c++", "VB", "C#");
// 使用Stream进行过滤和遍历
list.stream()
.filter(s -> s.length() > 2)
.forEach(System.out::println);
filter(Predicate)
: 对元素进行过滤。map(Function)
: 将每个元素转换为另一种类型。sorted(Comparator)
: 对元素进行排序。collect(Collector)
: 将 Stream 转换为集合、数组等。reduce(BinaryOperator)
: 归约操作,将所有元素根据给定的规则合并为一个结果。Lambda 表达式通常与 Stream API 一起使用,可以让代码更简洁、易读。例如:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
// 使用Stream API和Lambda表达式筛选和转换数据
List<String> result = names.stream()
.filter(name -> name.startsWith("A"))
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(result); // 输出: [ALICE]
Predicate<T>
: 接收一个参数,返回一个布尔值结果。
Predicate<String> isLongerThan5 = s -> s.length() > 5;
Consumer<T>
: 接收一个参数,无返回值。
Consumer<String> print = s -> System.out.println(s);
Function<T, R>
: 接收一个参数,返回一个结果。
Function<String, Integer> length = s -> s.length();
Supplier<T>
: 无参数,返回一个结果。
Supplier<String> supplier = () -> "Hello";
UnaryOperator<T>
: 接收一个参数,返回一个相同类型的结果。
UnaryOperator<String> toUpperCase = s -> s.toUpperCase();
© 著作权归作者所有
本文由 趣代码Blog 创作,采用 知识共享署名4.0 国际许可协议进行许可,本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。