Java函数式接口及Lambda表达式应用
Java函数式接口和Lambda表达式是Java 8引入的两个新特性,它们可以使用更简洁、更易读的方式编写代码。本文将介绍Java函数式接口和Lambda表达式的概念,并提供使用例子。
函数式接口是什么?
函数式接口是指只有一个抽象方法的接口。Java 8的java.util.function包中提供了很多种函数式接口,例如:Predicate,Function和Consumer等。
Lambda表达式是什么?
Lambda表达式是一种匿名函数,也称为闭包,在Java中类似于匿名类。它可以作为一个参数传递给方法或存储在变量中。Lambda表达式的语法如下:
(parameter1, parameter2...) -> {body}
其中,parameter1、parameter2等是参数列表,body是函数体。
Lambda表达式的应用
1. forEach()方法
Java 8为集合类提供了一个forEach()方法,可以使用Lambda表达式对集合进行循环遍历。
例如,下面的代码可以使用Lambda表达式循环遍历数组中的每个元素,并将它们打印出来:
String[] names = {"Tom", "Jerry", "Micky"};
Arrays.asList(names).forEach(name -> System.out.println(name));
输出结果为:
Tom
Jerry
Micky
2. Comparator接口
Comparator接口用于定制排序,Java 8中也提供了Comparator接口的Lambda表达式形式,如下:
Comparator<String> comparator = (String s1, String s2) -> s1.compareTo(s2);
可以将上述代码和Collections类的sort()方法一起使用,对字符串数组进行排序:
String[] names = {"Tom", "Jerry", "Micky"};
Arrays.sort(names, (s1, s2) -> s1.compareTo(s2));
3. Runnable接口
Runnable接口是在Java中常用的函数式接口之一,它只有一个无参的抽象方法run(),用于定义线程。在Java 8中,可以使用Lambda表达式形式实现Runnable接口,如下:
Runnable runnable = () -> {
System.out.println("Hello, world!");
};
下面的代码将使用上述所示的Lambda表达式创建并启动一个新线程:
Thread thread = new Thread(runnable);
thread.start();
输出结果为:
Hello, world!
4. Function接口
Function接口用于将一个类型转换为另一个类型,Java 8中也提供了Function接口的Lambda表达式形式。
例如,下面的代码定义了一个Function接口,将一个字符串转换为一个整数:
Function<String, Integer> converter = (input) -> Integer.parseInt(input);
下面的代码演示了如何使用上述Function接口将一个字符串转换为一个整数:
int result = converter.apply("123");
System.out.println(result);
输出结果为:
123
总结:
Java函数式接口和Lambda表达式是Java 8的重要功能之一,它们使Java的代码更加简洁、易读,同时使得代码可重用性更高。在日常开发中,掌握Java函数式接口和Lambda表达式的使用方法,有利于提高效率,减少代码量。
