千锋教育-做有情怀、有良心、有品质的职业教育机构

千锋武汉Java培训分享:Lambda表达式之函数式接口

来源:千锋教育
发布人:lemon
时间: 2022-01-18 15:09:00

  函数式接口(Functional Interface) :任何接口,如果只包含唯一 一个抽象方法,那么它就是一个FI。(之前它们被称为 SAM类型,即 单抽象方法类型(Single Abstract Method))。接口中的方法默认就是public abstract的。

   接口可能继承了一个 Object 已经提供的方法,比如 toString(),equals( )…这些都不属于函数式接口方法的范畴, 所以函数式接口中所说的方法不包括这些。

  可以通过 @FunctionalInterface 注解来显式指定一个接口是函数式接口。加上这个注解,接口中函数式接口方法少于一个或者多余一个,编译器都会提示错误。

  其实我们之前写的接口实例化就是函数式接口的实例化。

  函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

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

  函数式接口可以现有的函数友好地支持 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

  JDK 1.8 新增加的函数接口:

  java.util.function

  java.util.function 它包含了很多类,用来支持 Java的 函数式编程,该包中的函数式接口有:

1

2

3

4

5

6

7

  //Predicate接口  代码示例:

  @Test

  public void test7(){

  List list = Arrays.asList(11, 22, 33, 14, 15, 66, 7, 18, 19);

  //Predicate接口 常用test方法 存在则 test 方法返回 true

  Predicate predicate=n->n%2==1;

  for(Integer i:list) {

  if(predicate.test(i)){

  System.out.println("奇数:"+i);

  }

  }

  }

  private int getSum(int n1, int n2, BiFunction biFunction){

  return biFunction.apply(n1,n2);

  }

  //BiFunction 接受两个参数 返回一个结果

  @Test

  public void test8(){

  System.out.println("求余数:"+getSum(13,3,(n1,n2)->n1%n2));

  }

  千锋武汉Java培训机构配以高品质的面授和大量实战项目训练,还在毕业前夕为学员安排模拟面试环节,让学员在真正的面试过程中可以充分的发挥自身的优势,成为一名Java开发工程师。现在咨询报名还能免费试听两周,亲身实地感受授课质量,了解学员的学习情况。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

热搜文章HOT