变量(函数类型)参数计数和变量返回类型

时间:2015-10-25 18:54:39

标签: java generics functional-interface

我有以下问题 - 我必须编写一个方法,它将采用可变数量的Function参数,并在此基础上返回所需的类型。问题是,参数中的函数按顺序运行:

using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> li = new List<int>();
            for (int i = 1; i <= 1000; i++) 
            {
                if (i%3 == 0 && i%5 == 0) 
                {
                    li.Add(i);
                }
            }
            Console.Write("sum is " + li.Sum());
            Console.ReadLine();
        }
    }
}

正如您所看到的,我需要创建一个类,它将有一个方法(不允许重载),并且根据该方法将接收的内容,它必须返回正确的类型。

我有InputConverter类的开头,但我不知道如何让下一个函数从之前的函数中获取参数。

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);

    }
}

我认为我可以做这样的事情吗?

  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){

      }
  }

1 个答案:

答案 0 :(得分:4)

您无法在Java的类型系统中表达这一点。接受其他东西的需要。例如,您可以只写f1.andThen(f2).andThen(f3).andThen(f4)...