在java 8/11中,是否可以传递一个带有2个参数的函数作为另一个函数的参数?

在java 8/11中,是否可以传递一个带有2个参数的函数作为另一个函数的参数?,java,generics,java-8,functional-interface,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); } publicstaticlist-myMethod(List-

我有这个问题

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

到目前为止,我有:

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

}
publicstaticlist-myMethod(List-list1、List2、SomeFunction-converter){
//…做萨弗
返回converter.convert(列表1、列表2);
}
转换器是这样的:

public <T> List<T> converter(List<T> list1, List<T> list2) {
/// cast and do stuff)
return List<T> some stuff;
}
公共列表转换器(列表1、列表2){
///(演员和演员)
返回列出一些东西;
}
那么我想打个电话

myMethod<list1,list2,converter);
myMethod查看表示对同一类型的两个操作数执行的操作,生成与操作数类型相同的结果

public static <T> List<T> someMethodName(List<T> list1, List<T> list2,  
             BinaryOperator<List<T>> converter) { 
    return converter.apply(list1, list2);
}
要调用该函数,假设您有两个整数列表,例如:

List<Integer> first = ....
List<Integer> second = ....
List first=。。。。
第二个列表=。。。。
如果你想把它们连接起来,你会同时传递两个列表和一个行为,例如

List<Integer> concat = someMethodName(first, second, 
                       (l, r) -> Stream.concat(l.stream(), r.stream())
                       .collect(Collectors.toList()));
List concat=someMethodName(第一个、第二个、,
(l,r)->Stream.concat(l.Stream(),r.Stream())
.collect(Collectors.toList());
查看表示对同一类型的两个操作数执行的操作,产生与操作数类型相同的结果

public static <T> List<T> someMethodName(List<T> list1, List<T> list2,  
             BinaryOperator<List<T>> converter) { 
    return converter.apply(list1, list2);
}
要调用该函数,假设您有两个整数列表,例如:

List<Integer> first = ....
List<Integer> second = ....
List first=。。。。
第二个列表=。。。。
如果你想把它们连接起来,你会同时传递两个列表和一个行为,例如

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

您可以使函数采用
java.util.function.BinaryOperator
,该函数采用两个相同类型的参数并返回相同类型的结果:

public static <T> List<T> (List<T> list1, List<T>, 
                    BinaryOperator<List<T>> converter) { 
    return converter.apply(list1, list2);
}
公共静态列表(列表列表1、列表、,
二进制运算符转换器{
返回转换器。应用(列表1、列表2);
}

您可以使函数采用
java.util.function.BinaryOperator
,该函数采用两个相同类型的参数并返回相同类型的结果:

public static <T> List<T> (List<T> list1, List<T>, 
                    BinaryOperator<List<T>> converter) { 
    return converter.apply(list1, list2);
}
公共静态列表(列表列表1、列表、,
二进制运算符转换器{
返回转换器。应用(列表1、列表2);
}

您可以使用双功能代替函数,请给我举个例子好吗?很抱歉,我不擅长使用这个界面而不是功能你可以使用双功能你能给我举个例子吗?很抱歉,我不擅长使用这个接口。传统的做法是将结果类型命名为
R
,因此
List(List-list1,List,BiFunction-converter)
,这也会增加灵活性。@daniu非常好的观点(我从来没有记住)-尽管类型参数必须声明为
,但您能否给我一个例子,说明覆盖converter.apply的函数是什么样子的?我有点迷路了:汉克斯!我会根据我的目的修改它,希望它能适合我!:)@jpganz18对于这个特定的问题,我相信它解决了手头的问题,但是如果你正在努力解决某个问题,请随时发布新的问题。如果你已经尝试了一个很好的描述,我相信网站上的人会很乐意提供帮助。祝你好运。按照惯例,结果类型将被称为
R
,因此
List(List-list1,List,BiFunction-converter)
,这也会增加灵活性。@daniu非常好的一点(我从来没有记住)-尽管类型参数必须声明为
,但您能否给我一个例子,说明覆盖converter.apply的函数是什么样子的?我有点迷路了:汉克斯!我会根据我的目的修改它,希望它能适合我!:)@jpganz18对于这个特定的问题,我相信它解决了手头的问题,但是如果你正在努力解决某个问题,请随时发布新的问题。如果你已经尝试了一个很好的描述,我相信网站上的人会很乐意提供帮助。祝你好运