Java8 教程

Java8 Lambda 的类型:函数接口

在 Java 中,所有方法参数都有固定的类型。假如将数字 10 作为参数传递给一个方法,则参数的类型是 int。例如:

public void myMethod(int arg) {
   //...
}

那么,Lambda 表达式的类型又是什么呢?函数接口就是 Lambda 表达式的类型。

什么是函数接口?

Java8 引入了函数接口(Functional Interface)的概念,函数接口指只有一个抽象方法的接口,可以使用 Lambda 表达式或方法引用来实现该接口。

示例:自定义一个函数接口,采用 Lambda 表达式的方式去使用它,如下:

package com.hxstrive.jdk8.lambda;

/**
* 定义函数接口
* @author hxstrive.com
*/
public class Demo03 {

   public static void main(String[] args) {
       test((msg) -> {
           return "[" + msg + "]";
       }, "hello world");
   }

   private static void test(MyInterface myInterface, String msg) {
       System.out.println(myInterface.show(msg));
   }

}

// 自定义函数接口
interface MyInterface {

   // 一个抽象接口
   String show(String msg);

}

运行代码,输出如下:

[hello world]

Java 内置函数接口

Java8 中提供了一些常用的函数接口,如下:

  • Consumer<T>:接受一个 T 类型的输入参数,没有返回值。

  • Supplier<T>:不接受任何输入参数,返回一个 T 类型的值。

  • Function<T, R>:接受一个 T 类型的输入参数,返回一个 R 类型的值。

  • Predicate<T>:接受一个 T 类型的输入参数,返回一个布尔值。

  • UnaryOperator<T>:接受一个 T 类型的输入参数,返回一个 T 类型的值。

  • BinaryOperator<T>:接受两个 T 类型的输入参数,返回一个 T 类型的值。

注意,这些函数接口都定义在 java.util.function 包中,可以直接使用。使用函数接口可以使代码更简洁、易读和易于维护,同时也可以提高代码的可重用性和可测试性。

示例:使用 Function<T,R> 函数接口实现输入字符串,返回输入字符串的长度。如下:

package com.hxstrive.jdk8.lambda;

import java.util.function.Function;

/**
* 使用Java内置的 Function<T, R> 函数接口
* @author hxstrive.com
*/
public class Demo04 {

   public static void main(String[] args) {
       int len = calcStrLen((str) -> str.length(), "hello world");
       System.out.println("len=" + len);
   }

   private static int calcStrLen(Function<String, Integer> function, String str) {
       return function.apply(str);
   }
}

运行示例,输出如下:

len=11
说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号