java - 是否可以将具有 2 个参数的函数作为 java 8/11 中另一个函数的参数传递?

标签 java generics java-8 functional-interface

我有这个问题。

我正在使用一些泛型,有时我需要根据每种类型进行特定的转换。

到目前为止,我有这个:

public static <T> List<T> myMethod(List<T> list1, List2<T>, SomeFunction converter) { 
//... do suff
return converter.convert(list1, list2);

}

转换器是这样的:

public <T> List<T> converter(List<T> list1, List<T> list2) {
/// cast and do stuff)
return List<T> some stuff;
}

那我想打个电话

myMethod<list1,list2,converter);

我知道函数式接口(interface) Function 但我需要为此发送两个参数,有什么办法可以在 Java8/11 中实现吗?

想法?

最佳答案

查看BinaryOperator它表示对两个相同类型的操作数的操作,产生与操作数相同类型的结果。

public static <T> List<T> someMethodName(List<T> list1, List<T> list2,  
             BinaryOperator<List<T>> converter) { 
    return converter.apply(list1, list2);
}

BiFunction也是另一个选项,因为它表示接受两个参数并产生结果的函数。

public static <T, R> List<R> someMethodName(List<T> list1, List<T> list2,
            BiFunction<List<T>, List<T>, List<R>> converter) {
    return converter.apply(list1, list2);
}

为了调用该函数,我们假设您有两个整数列表,例如:

List<Integer> first = ....
List<Integer> second = ....

如果您想连接它们,您需要同时传递列表和行为,例如

List<Integer> concat = someMethodName(first, second, 
                       (l, r) -> Stream.concat(l.stream(), r.stream())
                       .collect(Collectors.toList()));

关于java - 是否可以将具有 2 个参数的函数作为 java 8/11 中另一个函数的参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53988241/

相关文章:

java - 在 SortedMap(TreeMap) 中使用 'position' 更新 POJO 属性

JavaFX NoClassDefFoundError 错误

对象生命周期结束的 Java 技术

java - 使用引用变量引用静态成员

java - 如何在java应用服务器中使用MongoClient的一个实例

swift - 泛型是在编译期间专门化的,还是它们就像 java 泛型一样仅用于编译时检查?

Java 泛型 - 类型参数 String 隐藏了 String 类型

c# - 在 C# 的通用列表中合并具有相同类型的项目的最有效方法是什么?

groovy - java.util.function.Predicate#and 和 Groovy 2.2 闭包

java - 如何在 Android API <24 中将对象包装在 lambda 中