在Java程序员的面试中,经常会被问到类似这样的问题:
- Java中的函数式接口是什么意思?
- 注解 @FunctionalInterface 的作用是什么?
- 实现一个函数式接口有哪几种方式?
- lambda表达式和匿名内部类有什么区别?
- Java中的方法引用有哪几种形式?
- 能说说你对 Stream 接口中的 map 和 reduce 方法的理解吗?
- Stream并行编程的底层实现用了什么多线程框架?
- 能说说 Stream 并行编程的适用场景以及注意事项吗?
- ConcurrentHashMap中,有哪些方法具备原子性?
- 为什么在lambda表达式中引用外部变量时,要求外部变量是final的?怎么绕开这个限制?
问题答案
1. Java中的函数式接口是什么意思?
只有一个抽象方法的接口都属于函数式接口。英文术语为 Functional Interface 。
2. 注解 @FunctionalInterface 的作用是什么?
@FunctionalInterface 主要是告诉编译器它修饰的接口是一个函数式接口,如果接口的定义不符合函数式接口的规范,那么在编译阶段就会报错。当然,我们也可以不加这个注解,对代码的使用没有任何影响。
3. 实现一个函数式接口有哪几种方式?
有3种方式:
- 通过一个类来实现,包括常规的类和匿名内部类
- 通过lambda表达式来实现
- 通过方法引用来实现