Java 传递函数作为参数(λ)

Java 传递函数作为参数(λ),java,lambda,java-8,Java,Lambda,Java 8,我试图理解Java8的Lambda表达式。在这个例子中,我想解析一些文件。对于每个文件,我需要创建一个特定模板的新实例(这对于一次传递的所有文件都是相同的) 如果我理解正确,这就是Lambda表达式的优点 有人能简单地向我解释一下如何将调用作为参数传递给模板的构造函数吗?(因此它可以是newtemplate1(),newtemplate2()等等) 您可以使用和构造函数: Java8API在包中提供了许多标准函数接口,尽管这些接口通常不超过两个参数。您可以使用第三方功能接口(我为其制作)或编写自

我试图理解Java8的Lambda表达式。在这个例子中,我想解析一些文件。对于每个文件,我需要创建一个特定模板的新实例(这对于一次传递的所有文件都是相同的)

如果我理解正确,这就是Lambda表达式的优点

有人能简单地向我解释一下如何将调用作为参数传递给模板的构造函数吗?(因此它可以是
newtemplate1()
newtemplate2()
等等)

您可以使用和构造函数:

Java8API在包中提供了许多标准函数接口,尽管这些接口通常不超过两个参数。您可以使用第三方功能接口(我为其制作)或编写自己的接口

自定义实现可能如下所示:

public static void main(String[] args) {
  new Parser(new File[]{}, Template1::new);
}

Parser(File[] files, TemplateFactory templateFactory) {
  for (File f : files) {
    Template t = templateFactory.createFrom(f);
  }
}

public static interface TemplateFactory {
  Template createFrom(File file);
}

哇,这是一个比我想象的更干净的语法!谢谢!我可以再问一个问题吗?如果模板的构造函数接受一个参数,例如文件本身(我不知道何时调用main方法),该怎么办。当然,我可以使用setter方法。但是有没有一种方法可以将参数传递给构造函数呢?对于只有一个参数的构造函数,您可以交换它。有关标准函数接口,请参阅,但如果需要,请编写您自己的单一抽象方法接口。谢谢,McDowell。我已经仔细阅读了,但我认为我对这一点太有挑战性了。看来我必须坚持二传。我已经添加了几个例子。
public static void main(String[] args) {
  new Parser(new File[]{}, Template1::new);
}

Parser(File[] files, Supplier<Template> templateFactory) {
  for (File f : files) {
    Template t = templateFactory.get();
  }
}
public static void main(String[] args) {
  new Parser(new File[]{}, Template1::new);
}

Parser(File[] files, Function<File, Template> templateFactory) {
  for (File f : files) {
    Template t = templateFactory.apply(f);
  }
}
public static void main(String[] args) {
  new Parser(new File[]{}, Template1::new);
}

Parser(File[] files, TemplateFactory templateFactory) {
  for (File f : files) {
    Template t = templateFactory.createFrom(f);
  }
}

public static interface TemplateFactory {
  Template createFrom(File file);
}