变量(函数类型)参数计数和变量 return 类型
Variable (Function type) argument count and variable return type
我有以下问题 - 我必须编写一个方法,它将采用可变数量的 Function 参数,并在此基础上 return 需要的类型。问题是,参数中的函数按顺序 运行:
public class Main {
public static void main(String[] args) throws Exception {
//Lambda expressions which will be taken as arguments in method.
Function<String,List<String>> flines = e->{
};
Function<List<String>,String> join = e ->{
};
Function<String,List<Integer>> collectInts = e->{
};
Function<List<Integer>,Integer> sum = e->{
};
// end of lambdas
String fname = System.getProperty("C:/LamComFile.txt");
InputConverter<String> fileConv = new InputConverter<>(fname);
List<String> lines = fileConv.convertBy(flines);
String text = fileConv.convertBy(flines, join);
List<Integer> ints = fileConv.convertBy(flines, join, collectInts);
Integer sumints = fileConv.convertBy(flines, join, collectInts, sum);
System.out.println(lines);
System.out.println(text);
System.out.println(ints);
System.out.println(sumints);
List<String> arglist = Arrays.asList(args);
InputConverter<List<String>> slistConv = new InputConverter<>(arglist);
sumints = slistConv.convertBy(join, collectInts, sum);
System.out.println(sumints);
}
}
如您所见,我需要创建一个 class,它将有一个方法(不允许重载)并且根据该方法将接收的内容,它必须 return正确的类型。
我有 InputConverter 的开头 class,但我不知道如何让下一个函数从之前的函数中获取参数。
public class InputConverter<T> {
private T obj;
public InputConverter(T obj) {
this.obj = obj;
}
public <what goes here?> and_here convertBy(Function<In,Out>... funcs){
}
}
我想我可以做这样的事情?
if(funcs.length()==1){
what? = funcs[0].apply(this.obj);
return what?
}
您无法在 Java 的类型系统中表达它。接受对其他事物的需求。例如,您可以只写 f1.andThen(f2).andThen(f3).andThen(f4)...
.
我有以下问题 - 我必须编写一个方法,它将采用可变数量的 Function 参数,并在此基础上 return 需要的类型。问题是,参数中的函数按顺序 运行:
public class Main {
public static void main(String[] args) throws Exception {
//Lambda expressions which will be taken as arguments in method.
Function<String,List<String>> flines = e->{
};
Function<List<String>,String> join = e ->{
};
Function<String,List<Integer>> collectInts = e->{
};
Function<List<Integer>,Integer> sum = e->{
};
// end of lambdas
String fname = System.getProperty("C:/LamComFile.txt");
InputConverter<String> fileConv = new InputConverter<>(fname);
List<String> lines = fileConv.convertBy(flines);
String text = fileConv.convertBy(flines, join);
List<Integer> ints = fileConv.convertBy(flines, join, collectInts);
Integer sumints = fileConv.convertBy(flines, join, collectInts, sum);
System.out.println(lines);
System.out.println(text);
System.out.println(ints);
System.out.println(sumints);
List<String> arglist = Arrays.asList(args);
InputConverter<List<String>> slistConv = new InputConverter<>(arglist);
sumints = slistConv.convertBy(join, collectInts, sum);
System.out.println(sumints);
}
}
如您所见,我需要创建一个 class,它将有一个方法(不允许重载)并且根据该方法将接收的内容,它必须 return正确的类型。
我有 InputConverter 的开头 class,但我不知道如何让下一个函数从之前的函数中获取参数。
public class InputConverter<T> {
private T obj;
public InputConverter(T obj) {
this.obj = obj;
}
public <what goes here?> and_here convertBy(Function<In,Out>... funcs){
}
}
我想我可以做这样的事情?
if(funcs.length()==1){
what? = funcs[0].apply(this.obj);
return what?
}
您无法在 Java 的类型系统中表达它。接受对其他事物的需求。例如,您可以只写 f1.andThen(f2).andThen(f3).andThen(f4)...
.