无法理解Java 8的功能<>

时间:2019-03-30 23:10:36

标签: java java-8

在学习如何使用各种新工具时,我遇到了难以理解的语法(Function x-> ...),并且我希望有人尽可能地编写等效的代码这样我才能更好地理解它。

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

任何使用更传统语法而不是怪异函数的代码块都将受到极大的赞赏,并且对帮助我更好地理解Java很有用!

3 个答案:

答案 0 :(得分:1)

可以用匿名类代替

Function<String, HashSet<String>> asSet = new Function<>() {
    @Override
    public HashSet<String> apply(String s) {
        return new HashSet<>() {{
            do_something(s);
        }};
    }
};

您只需从functional interfaceapply实现Function方法:

  

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

查看更多What is use of Functional Interface in Java 8?

答案 1 :(得分:0)

基本上,并且在不解释使用Function的优点的情况下,您可以想象您的函数类似于:

HashSet<String> anonymousMethod(String x) {
    return doSomething(x);
}

...,它匿名存在于您的函数对象中。

答案 2 :(得分:0)

此语法称为Lambda Expressions,用于简化实现Functional Interfaces的过程。

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

  

// Java程序演示功能界面

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

  

//演示Java程序的实现
  //使用lambda表达式的功能接口

class Test {
    public static void main(String args[]) {

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