If you want to create a method that uses several functions and is not interested in intermediate values, you can make it a general method. The code in your question is weird because it assumes that the value can be String and a List<String> at the same time.
But compared to your other question , you have a different picture. Although the varargs method does not work this way, you can easily provide overloaded methods for actual use cases:
public class InputConverter<T> { private T value; public InputConverter(T value) { this.value = value; } public <R> R convertBy(Function<? super T, ? extends R> f) { return f.apply(value); } public <T1,R> R convertBy( Function<? super T, ? extends T1> f1, Function<? super T1, ? extends R> f2) { return f2.apply(f1.apply(value)); } public <T1,T2,R> R convertBy( Function<? super T, ? extends T1> f1, Function<? super T1, ? extends T2> f2, Function<? super T2, ? extends R> f3) { return f3.apply(f2.apply(f1.apply(value))); } public <T1,T2,T3,R> R convertBy( Function<? super T, ? extends T1> f1, Function<? super T1, ? extends T2> f2, Function<? super T2, ? extends T3> f3, Function<? super T3, ? extends R> f4) { return f4.apply(f3.apply(f2.apply(f1.apply(value)))); } }
Assuming you fixed your interface types and created the functions described in this answer , you can use it as
InputConverter<String> fileConv=new InputConverter<>("LamComFile.txt"); 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);