我正在按照这个示例来理解Java 8函数接口。示例中使用了以下代码。
import org.apache.commons.codec.digest.DigestUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
public class Java8Function4 {
public static void main(String[] args) {
Java8Function4 obj = new Java8Function4();
List<String> list = Arrays.asList("node", "c++", "java", "javascript");
// lambda
//List<String> result = obj.map(list, x -> obj.sha256(x));
// method reference
List<String> result = obj.map(list, obj::sha256);
result.forEach(System.out::println);
}
public <T, R> List<R> map(List<T> list, Function<T, R> func) {
List<R> result = new ArrayList<>();
for (T t : list) {
result.add(func.apply(t));
}
return result;
}
// sha256 a string
public String sha256(String str) {
return DigestUtils.sha256Hex(str);
}
}
我理解方法
map
需要两个参数,List<T> list, Function<T, R> func
和返回List<R>
,但我不明白在方法返回类型之前使用<T, R>
。
有人可以帮我理解这里的
<T, R>
有什么用吗。
服务具有通用类型,使函数尽可能通用(但也动态适应列表的类型 - 整数、字符串...等)
接口功能
类型参数:
T - 函数输入的类型
R - 函数结果的类型
所有已知子接口:
一元运算符
功能界面:
这是一个函数式接口,因此可以用作 lambda 表达式或方法引用的赋值目标。