在本文中,我将使用一个简单的示例来说明函数接口在Java 中的工作方式。
-
Stream.filter()的简单示例
通过指定字符串的长度,以下代码可用于过滤字符串列表。
package com.programcreek.java8.stream;
import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.stream.Stream;
public class Java8Filter {public static void main(String[] args) {
List list = new ArrayList();
list.add(“java”);
list.add(“php”);
list.add(“python”);
list.add(“lisp”);
list.add(“c++”);//filter function Stream<String> stream = list.stream().filter(p -> p.length() > 3); String[] arr = stream.toArray(String[]::new); System.out.println(Arrays.toString(arr));
}}
2.什么是功能接口
功能接口是具有单个抽象方法的接口。Java的API有许多一方法接口,例如Runnable,Callable,Comparator,ActionListener,等。
让我们看一下Stream的filter()方法的签名:
Stream filter(Predicate<? super T> predicate);
根据filter()的方法签名,lambda表达式p -> p.length() > 3应为Predicate的实例。谓词接口具有一种抽象方法:
boolean test(T t)
由于Java的面向对象特性,所有内容都应该是一个对象。因此,在后台将lambda表达式转换为功能接口的对象。
3.功能接口对象的实现
您可能会对功能接口的对象-谓词-的外观感到好奇。我们可以猜测filter()方法的可能实现:
Stream filter(Predicate<? super T> predicate){
for (each string in stream){
if(predicate.test(string)){
keep the string
}else{
drop the string
}return stream;}
从给定的lambda表达式转换谓词对象。
最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。