我有以下方法:
public void caller(){
List<Class1> data1 = Arrays.asList(new Class1(), new Class1() ...);
List<Class2> data2 = Arrays.asList(new Class2(), new Class2() ...);
// The following is what I'm trying to implement:
List<BiConsumer<Class1, Double>> peeks1 = Arrays.asList(Class1::setOneNum, Class1::setAnotherNum, Class1:: setMoreNum);
List<BiConsumer<Class2, Double>> peeks2 = Arrays.asList(Class2::setSomeNum1, Class2::setSomeNum2);
helper(data1, peeks1);
helper(data2, peeks2);
...
}
private <T> List<T> helper(List<T> data, List<BiConsumer<T, Double>> peeks) {
for(BiConsumer<T, Double> singlePeek: peeks){
data = data.stream()
.peek(a -> singlePeek.accept(a, math.random()))
.collect(Collectors.toList());
}
return data;
}
Run Code Online (Sandbox Code Playgroud)
Class1and有其他共同的实现Class2,唯一的区别是在 the 之后调用的方法,.stream()这就是为什么我试图将这些函数“合并”为一个helper。
哪里BiConsumer有二传手。我想在 stream() 之后调用 setter 列表。但是我无法将功能接口列表输入到helper()(我尝试的是Arrays.asList(Class1::setNum, Class1::setAnotherNum, Class1::setMoreNum)不能作为输入工作,因为Array.asList()只接受Object)。那么有什么解决办法吗?谢谢!
@user7 感谢您指出。我粗心了,但我已经修正了“错别字”。并添加了调用者功能。
当您调用 .asList 方法时,您必须指定目标类型:
Arrays.<BiConsumer<Object, Double>>asList(Class1::setOneNum, ...)
Run Code Online (Sandbox Code Playgroud)
更新:
根据问题的更新代码,Arrays.asList的结果没有直接交给helper方法,所以不需要显式类型。
代码不起作用的唯一可能原因是:
至少其中一个方法 (setOneNum, setSomeNum1, ...) 有错误的参数类型
至少其中一种方法不是静态的
| 归档时间: |
|
| 查看次数: |
401 次 |
| 最近记录: |