Java 使用Lambda创建静态内部函数?

Java 使用Lambda创建静态内部函数?,java,lambda,java-8,Java,Lambda,Java 8,是否可以使用lambda创建静态内部函数 具体来说,我想做以下工作: function myFunc(){ Map<Integer, String> myMap = new HashMap <Integer, String> (); myMap.put(1,"A"); String head = () -> myMap.get(1); myMap.put(1,"B"); System.out.println(head);

是否可以使用lambda创建静态内部函数

具体来说,我想做以下工作:

function myFunc(){
    Map<Integer, String> myMap = new HashMap <Integer, String> ();
    myMap.put(1,"A");
    String head = () -> myMap.get(1);
    myMap.put(1,"B");

    System.out.println(head);   // Should print B
}

所有lambda都是内部函数。你写的是一个供应商:

通过查看java.util.function包,可以看到存在哪些类型的函数


但是请注意,在lambdas之前,实现这一点的标准方法只是编写一个私有方法并调用它,而传统样式所涉及的开销会更少,尽管这一开销是否重要是另一个问题。

所有lambdas都是内部函数。你写的是一个供应商:

通过查看java.util.function包,可以看到存在哪些类型的函数



但是请注意,在lambdas之前,实现这一点的标准方法只是编写一个私有方法并调用它,而传统样式所涉及的开销会更少,尽管这一开销是否重要是另一个问题。

您到底想做什么?是什么阻止你调用System.out.printlnmyMap.get1?什么都没有。我们的想法是能够重用代码,这样我就不必重写两次。您要重用哪些代码?在本例中,是myMap.get1。但你可以想象任何代码都可以进入其中。@YongkeBillYu不,我们无法想象。您的示例没有演示您实际要做的事情,甚至没有类型一致性。您到底想做什么?是什么阻止你调用System.out.printlnmyMap.get1?什么都没有。我们的想法是能够重用代码,这样我就不必重写两次。您要重用哪些代码?在本例中,是myMap.get1。但你可以想象任何代码都可以进入其中。@YongkeBillYu不,我们无法想象。您的示例没有演示您实际要做的事情,甚至没有类型一致性。它可以工作,尽管它不像我希望的那样优雅。也许传统的方法更好。@YongkeBillYu有时候lambda函数很有用,我不认为现在是这样的时候。使用它们执行供应商getHead=->myMap.get1;而不是字符串head=myMap.get1;对我来说似乎完全没有意义,所以是的,在这种情况下,传统方法会更好。@JLRishe重点是调用。多次获取,使其像一个动态变量。@Saposhiente是的,如果Java可以实现类似于C的属性,那么所有这些都可以避免,唉!虽然它不像我所希望的那样优雅,但它确实有效。也许传统的方法更好。@YongkeBillYu有时候lambda函数很有用,我不认为现在是这样的时候。使用它们执行供应商getHead=->myMap.get1;而不是字符串head=myMap.get1;对我来说似乎完全没有意义,所以是的,在这种情况下,传统方法会更好。@JLRishe重点是调用。多次获取,使其像一个动态变量。@Saposhiente是的,如果Java可以实现类似于C的属性,那么所有这些都可以避免,唉!
Supplier<String> getHead = () -> myMap.get(1);
System.out.println(getHead.get());