在 java 8/11 中是否可以将具有 2 个参数的函数作为另一个函数的参数传递?
is it possible to pass a function with 2 parameters as parameter for another function in java 8/11?
我有这个问题。
我正在使用一些泛型,有时我需要根据每种类型进行特定的转换。
所以,到目前为止我有这个:
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);
我知道函数式接口 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.util.function.BinaryOperator<T>
,这是一个接受两个相同类型参数和 returns 相同类型结果的函数:
public static <T> List<T> (List<T> list1, List<T>,
BinaryOperator<List<T>> converter) {
return converter.apply(list1, list2);
}
我有这个问题。
我正在使用一些泛型,有时我需要根据每种类型进行特定的转换。
所以,到目前为止我有这个:
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);
我知道函数式接口 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.util.function.BinaryOperator<T>
,这是一个接受两个相同类型参数和 returns 相同类型结果的函数:
public static <T> List<T> (List<T> list1, List<T>,
BinaryOperator<List<T>> converter) {
return converter.apply(list1, list2);
}