函数式接口详解(Java)

函数式接口详解(Java)_函数式接口作为参数_凯凯凯凯.的博客-CSDN博客

函数式接口:有且仅有一个抽象方法的接口

Java中函数式编程体现就是Lambda表达式,所以函数式接口就是可以适用于Lambda使用的接口

只有确保接口中仅有一个抽象方法,Java中的Lambda才能顺利地进行推导

如何检测一个接口是不是函数式接口呢?

@Functionallnterface
放在 接口定义的上方:如果接口是函数式接口,编译通过;如果不是,编译失败


注意:

我们自己定义函数式接口的时候,@Functionallnterface是可以选的,就算我们不写这个注解,只要保证满足函数式接口定义的条件,也照样是函数式接口。但是,建议加上该注解

1.2 函数式接口作为方法的参数



1.3 函数式接口作为方法的返回值

2.1 常用的函数式接口

Java 8在java.util.function包下预定义了大量的函数式接口供我们使用

我们重点学习下面4个接口

  • Supplier接口
  • Consumer接口
  • Predicate接口
  • Function接口

函数式接口详解(Java)_第1张图片

示例:   list根据属性去重

private static  Predicate distinctByKey(Function keyExtractor) {
    Set seen = ConcurrentHashMap.newKeySet();
    return t -> seen.add(keyExtractor.apply(t));
}
  @Test
  public void distinctByProperty2() throws JsonProcessingException {

    List studentList = getStudentList();

//根据名字去重
    studentList = studentList.stream()
        .filter(distinctByKey(Student::getName))
        .collect(Collectors.toList());

 studentList = studentList.stream()
        .filter(distinctByKey(temp->temp.getName()))
        .collect(Collectors.toList());


  }

你可能感兴趣的:(java,python,开发语言)