在学习如何使用各种新工具时,我遇到了难以理解的语法(Function x-> ...),并且我希望有人尽可能地编写等效的代码这样我才能更好地理解它。
Function<String, HashSet<String>> asSet = (String x) ->
new HashSet<String>() {{
do_something(x);
}};
任何使用更传统语法而不是怪异函数的代码块都将受到极大的赞赏,并且对帮助我更好地理解Java很有用!
答案 0 :(得分:1)
可以用匿名类代替
Function<String, HashSet<String>> asSet = new Function<>() {
@Override
public HashSet<String> apply(String s) {
return new HashSet<>() {{
do_something(s);
}};
}
};
您只需从functional interface的apply
实现Function
方法:
请注意,可以使用lambda表达式,方法引用或构造函数引用来创建功能接口的实例。
答案 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();
}
}