java 函数式编程接口Function介绍及代码示例
时间: 2024-05-09 10:21:28 浏览: 68
Function是一个接口,其定义如下:
```
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);
// 其它默认方法省略
}
```
它是一个函数式接口,只包含一个抽象方法apply(),该方法的作用是接收一个输入参数T,返回一个输出结果R。
Function接口常用于函数式编程中的函数映射(map)操作,其代码示例如下:
```
List<String> names = Arrays.asList("Tom", "Jerry", "Mickey");
List<Integer> nameLengths = names.stream().map(new Function<String, Integer>() {
@Override
public Integer apply(String s) {
return s.length();
}
}).collect(Collectors.toList());
```
以上代码将字符串列表names中的每个字符串映射为其长度,并将长度列表nameLengths返回。注意,以上代码可以使用Lambda表达式进一步简化。
相关问题
使用函数式接口的Java代码示例
在Java中,我们可以使用`java.util.function`包下的函数式接口来进行编程,例如`Consumer`, `Function`, `Supplier`, `Predicate`等。这里是一个简单的示例,展示如何使用`Function`接口作为方法的参数:
```java
import java.util.Arrays;
import java.util.List;
import java.util.Function;
public class FunctionalExample {
public static void main(String[] args) {
// 创建一个Person列表
List<Person> people = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Charlie", 35)
);
// 定义一个Function接口,将Person转换为String
Function<Person, String> nameGetter = person -> person.getName();
// 使用这个Function作为参数,获取每个人的名字
for (Person person : people) {
String name = nameGetter.apply(person);
System.out.println("Name: " + name);
}
}
}
class Person {
private String name;
private int age;
// getters and setters...
public String getName() {
return name;
}
}
```
在这个例子中,`nameGetter`就是我们定义的一个函数式接口`Function`的实现,它将`Person`对象映射成名字字符串。然后我们在`main`方法中使用了这个函数作为参数,实现了批量获取人员姓名的功能。
java 8 函数式编程示例
以下是一个简单的 Java 8 函数式编程示例:
```java
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
public class FunctionalProgrammingExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// 使用 Lambda 表达式遍历列表并打印每个元素
names.forEach(name -> System.out.println(name));
// 使用方法引用打印每个元素
Consumer<String> printName = System.out::println;
names.forEach(printName);
// 使用 Lambda 表达式过滤列表中的元素
names.stream()
.filter(name -> name.startsWith("A"))
.forEach(System.out::println);
// 使用 Lambda 表达式对列表中的元素进行映射
names.stream()
.map(name -> name.toUpperCase())
.forEach(System.out::println);
}
}
```
这个示例演示了如何使用 Lambda 表达式和方法引用来遍历列表、过滤元素、映射元素等常见操作。通过使用 Java 8 的函数式编程特性,代码变得更加简洁、易读和易于维护。
阅读全文