无法理解Java 8的功能

无法理解Java 8的功能,java,java-8,Java,Java 8,在我学习如何使用各种新工具时,我运行了这个语法函数x->。。。我很难理解它,如果可能的话,我希望有人能写一些等价的代码,这样我就能更好地理解它 Function<String, HashSet<String>> asSet = (String x) -> new HashSet<String>() {{ do_something(x); }}; 任何使用更传统语法而不是奇怪函数的代码块都将非常受欢迎,并有助于我更

在我学习如何使用各种新工具时,我运行了这个语法函数x->。。。我很难理解它,如果可能的话,我希望有人能写一些等价的代码,这样我就能更好地理解它

Function<String, HashSet<String>> asSet = (String x) ->
      new HashSet<String>() {{
        do_something(x);
      }};

任何使用更传统语法而不是奇怪函数的代码块都将非常受欢迎,并有助于我更好地理解Java

它可以替换为匿名类:

Function<String, HashSet<String>> asSet = new Function<>() {
    @Override
    public HashSet<String> apply(String s) {
        return new HashSet<>() {{
            do_something(s);
        }};
    }
};
您只需从函数中实现apply方法,该函数为:

请注意,可以使用lambda表达式、方法引用或构造函数引用创建函数接口的实例


请参阅更多基本信息,在不解释使用s的优点的情况下,您可以想象您的函数类似于:

HashSet<String> anonymousMethod(String x) {
    return doSomething(x);
}
…匿名驻留在函数对象中。

此语法称为它,用于简化实现

功能接口:是具有一个要实现的功能的接口,例如,您可以编写:

//演示功能接口的Java程序

//Java程序来演示 //使用lambda表达式的函数接口


函数只是一个普通的接口;->语法与此无关。原因可能重复,此代码不可理解,不是lambda表达式。这是由于使用了,它被用于一个与构造的映射完全无关的语句而被最大化了。该代码与函数asSet=x->{do_somethingx;return new HashSet;}的作用相同,只是它更为详细,并创建了HashSet的意外子类,如果包含的方法不是静态的,则包括内存泄漏。
class Test {
    public static void main(String args[]) {
        // create anonymous inner class object 
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("New thread created");
            }
        }).start();
    }
}
class Test {
    public static void main(String args[]) {

        // lambda expression to create the object 
        new Thread(() - > {
            System.out.println("New thread created");
        }).start();
    }
}