我听说它是C#中一个名为Lambda表达式的概念,它已经在java 8中添加了。 我是android开发人员,所以我担心为什么这个概念会添加到Java中。当然它有一个很好的优势,但我找不到。
我将它添加到我的项目中,将其添加到Cradle:
button4.setOnClickListener( e -> Toast.makeText(Main2Activity.this, "test", Toast.LENGTH_SHORT).show());
并写一些我用Google搜索的Lambda Expression:
{{1}}
我确实锁定了在Android中使用Lambda-Expression的好例子。
答案 0 :(得分:2)
Lambda表达式刚刚添加到java中,使您的代码模式具有表现力
。在此过程中,它们简化了某些常见结构的实现方式。
添加lambda 表达式还为其他新的Java功能提供了催化剂,包括默认功能 允许您定义接口的默认行为的方法 方法和方法引用(此处描述),它允许您引用方法 没有执行它。
所以lambda表达式不会对你为android编码的方式做任何改变,它只会增强你在java中编码的方式
您需要声明一个functinal接口才能使用lambda表达式
一个小例子
// A functional interface.
interface MyNumber {
double getValue();
}
class LambdaDemo {
public static void main(String args[])
{
MyNumber myNum; // declare an interface reference
// Here, the lambda expression is simply a constant expression.
// When it is assigned to myNum, a class instance is
// constructed in which the lambda expression implements
// the getValue() method in MyNumber.
myNum = () -> 123.45;
// Call getValue(), which is provided by the previously assigned
// lambda expression.
System.out.println("A fixed value: " + myNum.getValue());
// Here, a more complex expression is used.
myNum = () -> Math.random() * 100;
// These call the lambda expression in the previous line.
System.out.println("A random value: " + myNum.getValue());
System.out.println("Another random value: " + myNum.getValue());
// A lambda expression must be compatible with the method
// defined by the functional interface. Therefore, this won't work:
// myNum = () -> "123.03"; // Error!
}
}
**程序的样本输出**
A fixed value: 123.45
A random value: 88.90663650412304
Another random value: 53.00582701784129
答案 1 :(得分:1)
Java-8中的Lambda表达式无法做到,旧的Java无法做到。唯一的区别是你需要输入更少,代码变得更具可读性。 (我总是讨厌那些匿名课程)
答案 2 :(得分:1)
使用Lambdas可以编写功能样式的代码。对于某些领域(如业务逻辑)而言,这是一个很大的优势 - 可以产生更紧凑和可读的代码。
在Java 8中添加了一个新的Stream APIs。 Lambdas是该扩展的一部分。
答案 3 :(得分:1)
嗯,一个lambda表达式就像一个可调用的或Runnable接口,几十年前就已经在Java中了。
优点是Java 8带来了一些接口约定,由lambda表达式实现,这是最常用的实现。
Void=Consumer
Boolean=Predicate
Send/Return argument=Function
这将是功能功能示例
/**
* In this example we use a Function, which receive an item and then return the same or another item through the pipeline.
* Is the function used by mutable operators as Map or FlatMap
*
*/
@Test
public void functionFunction() throws InterruptedException {
String words = Stream.of("hello_functional_world")
.map(replaceWordsFunction())
.reduce("", String::concat);
System.out.println(words);
}
private Function<String, String> replaceWordsFunction() {
return a -> a.replace("_", " ");
}
您可以查看这些实际示例,详细说明这项新功能的运作方式,让您的世界变得更加美好。
https://github.com/politrons/reactive/blob/master/src/test/java/stream/Functions.java
答案 4 :(得分:0)
Lambdas删除样板代码并使应用程序更全面。尤其是当你使用RxJava库时 - 如果app以反应方式工作,你需要在一个单独的链块中定义每个操作,这看起来非常笨拙而没有lambda。
答案 5 :(得分:0)
我终于找到了这个好example:
Lambda表达式在Java 8中引入,并且被吹捧为Java 8的最大特性.Lambda表达式有助于函数式编程,并简化了很多开发。
lambda表达式的特征在于以下语法 -
参数 - &gt;表达主体
这是一个很好的例子:
public class Java8Tester { public static void main(String args[]){ Java8Tester tester = new Java8Tester(); //with type declaration MathOperation addition = (int a, int b) -> a + b; //with out type declaration MathOperation subtraction = (a, b) -> a - b; //with return statement along with curly braces MathOperation multiplication = (int a, int b) -> { return a * b; }; //without return statement and without curly braces MathOperation division = (int a, int b) -> a / b; System.out.println("10 + 5 = " + tester.operate(10, 5, addition)); System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction)); System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication)); System.out.println("10 / 5 = " + tester.operate(10, 5, division)); //with parenthesis GreetingService greetService1 = message -> System.out.println("Hello " + message); //without parenthesis GreetingService greetService2 = (message) -> System.out.println("Hello " + message); greetService1.sayMessage("Mahesh"); greetService2.sayMessage("Suresh"); } interface MathOperation { int operation(int a, int b); } interface GreetingService { void sayMessage(String message); } private int operate(int a, int b, MathOperation mathOperation){ return mathOperation.operation(a, b); } }
我发布了波斯语版here