首页 > 技术文章 > 四大函数式接口

lanxinren 2021-04-26 19:41 原文

简介

新时代程序员必须掌握:lambda 表达式、链式编程、函数式接口、Stream 流式计算

函数式接口:只有一个方法的接口,可以用来简化编程模型。

函数式接口可以被隐式转换为lambda表达式。

JDK 1.8 之前已有的函数式接口:

  • java.lang.Runnable
  • java.util.concurrent.Callable
  • java.security.PrivilegedAction
  • java.util.Comparator
  • java.io.FileFilter
  • java.nio.file.PathMatcher
  • java.lang.reflect.InvocationHandler
  • java.beans.PropertyChangeListener
  • java.awt.event.ActionListener
  • javax.swing.event.ChangeListener

JDK 1.8 新增加的函数接口:

  • java.util.function

Java提供了@FunctionalInterface注解用于标记接口是函数式接口public class FunctionalInterfaceTest{};也可以不用标记

Function 函数型接口

Function 函数型接口

示例

 @Test
    public void test01(){
        //方式一:匿名内部类
//        Function<String,String> function=new Function<String, String>() {
//            @Override
//            public String apply(String s) {
//                return s;
//            }
//        };
        //方式二:函数式接口支持lambda表达式
        Function<String,String> function = (str)->{
            return str;
        };
        System.out.println(function.apply("dongjixue"));
    }

//运行结果:dongjixue

Predicate 断定型接口

Predicate 断定型接口

示例

 @Test
 public void test02(){
     Predicate<String> predicate = (str)->{
         return str.isEmpty();
     };
     System.out.println(predicate.test("dongjixue"));
     System.out.println(predicate.test(""));
 }

//运行结果 false true

Suppier 供给型接口

Suppier 供给型接口

示例

@Test
public void test03(){
    Supplier<String> supplier = ()->{
        return "dongjixue";
    };
    System.out.println(supplier.get());
}
//运行结果:dongjixue

Consummer 消费型接口

Consummer 消费型接口

示例

@Test
public void test04(){
    Consumer<String> consumer = (str)->{
        System.out.println(str);
    };
    consumer.accept("dongjixue");
}
//运行结果:dongjixue

此函数式接口在foreach循环中用到过

default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }

参考教程:https://www.kuangstudy.com/

推荐阅读