本文概述
- 功能介面
- 为什么要使用Lambda表达式
- Java Lambda表达式语法
- 没有Lambda表达式
- Java Lambda表达式示例
- Java Lambda表达式示例:无参数
- Java Lambda表达式示例:单个参数
- Java Lambda表达式示例:多个参数
- Java Lambda表达式示例:带有或不带有return关键字
- Java Lambda表达式示例:Foreach循环
- Java Lambda表达式示例:多个语句
- Java Lambda表达式示例:创建线程
- Java Lambda表达式示例:比较器
- Java Lambda表达式示例:过滤器收集数据
- Java Lambda表达式示例:事件监听器
Lambda表达式用于提供具有功能接口的接口的实现。它节省了大量代码。在使用lambda表达式的情况下, 我们无需再次定义用于提供实现的方法。在这里, 我们只编写实现代码。
Java lambda表达式被视为函数, 因此编译器不会创建.class文件。
功能介面 Lambda表达式提供了功能接口的实现。只有一种抽象方法的接口称为功能接口。 Java提供了@FunctionalInterface注释, 用于将接口声明为功能接口。
为什么要使用Lambda表达式
- 提供执行功能的接口。
- 更少的编码。
(argument-list) ->
{body}
Java lambda表达式由三个组件组成。
1)参数列表:也可以为空或非空。
2)箭头令牌:用于链接参数列表和表达式主体。
3)主体:它包含lambda表达式的表达式和语句。
无参数语法
() ->
{
//Body of no parameter lambda
}
一参数语法
(p1) ->
{
//Body of single parameter lambda
}
两参数语法
(p1, p2) ->
{
//Body of multiple parameter lambda
}
让我们看一下我们不实现Java lambda表达式的情况。在这里, 我们不使用lambda表达式来实现接口。
没有Lambda表达式
interface Drawable{
public void draw();
}
public class LambdaExpressionExample {
public static void main(String[] args) {
int width=10;
//without lambda, Drawable implementation using anonymous class
Drawable d=new Drawable(){
public void draw(){System.out.println("Drawing "+width);
}
};
d.draw();
}
}
立即测试
输出:
Drawing 10
Java Lambda表达式示例 现在, 我们将借助Java lambda表达式来实现上述示例。
@FunctionalInterface//It is optional
interface Drawable{
public void draw();
}public class LambdaExpressionExample2 {
public static void main(String[] args) {
int width=10;
//with lambda
Drawable d2=()->
{
System.out.println("Drawing "+width);
};
d2.draw();
}
}
立即测试
输出:
Drawing 10
Lambda表达式可以具有零个或任意数量的参数。让我们看看示例:
Java Lambda表达式示例:无参数
interface Sayable{
public String say();
}
public class LambdaExpressionExample3{
public static void main(String[] args) {
Sayable s=()->
{
return "I have nothing to say.";
};
System.out.println(s.say());
}
}
立即测试
输出:
I have nothing to say.
Java Lambda表达式示例:单个参数
interface Sayable{
public String say(String name);
}public class LambdaExpressionExample4{
public static void main(String[] args) {
// Lambda expression with single parameter.
Sayable s1=(name)->
{
return "Hello, "+name;
};
System.out.println(s1.say("Sonoo"));
// You can omit function parentheses
Sayable s2= name ->
{
return "Hello, "+name;
};
System.out.println(s2.say("Sonoo"));
}
}
立即测试
输出:
Hello, Sonoo
Hello, Sonoo
Java Lambda表达式示例:多个参数
interface Addable{
int add(int a, int b);
}public class LambdaExpressionExample5{
public static void main(String[] args) {// Multiple parameters in lambda expression
Addable ad1=(a, b)->
(a+b);
System.out.println(ad1.add(10, 20));
// Multiple parameters with data type in lambda expression
Addable ad2=(int a, int b)->
(a+b);
System.out.println(ad2.add(100, 200));
}
}
立即测试
输出:
30
300
Java Lambda表达式示例:带有或不带有return关键字 在Java lambda表达式中, 如果只有一条语句, 则可以使用也可以不使用return关键字。当lambda表达式包含多个语句时, 必须使用return关键字。
interface Addable{
int add(int a, int b);
}public class LambdaExpressionExample6 {
public static void main(String[] args) {// Lambda expression without return keyword.
Addable ad1=(a, b)->
(a+b);
System.out.println(ad1.add(10, 20));
// Lambda expression with return keyword.
Addable ad2=(int a, int b)->
{
return (a+b);
};
System.out.println(ad2.add(100, 200));
}
}
立即测试
输出:
30
300
Java Lambda表达式示例:Foreach循环
import java.util.*;
public class LambdaExpressionExample7{
public static void main(String[] args) {List<
String>
list=new ArrayList<
String>
();
list.add("ankit");
list.add("mayank");
list.add("irfan");
list.add("jai");
list.forEach(
(n)->
System.out.println(n)
);
}
}
立即测试
输出:
ankit
mayank
irfan
jai
Java Lambda表达式示例:多个语句
@FunctionalInterface
interface Sayable{
String say(String message);
}public class LambdaExpressionExample8{
public static void main(String[] args) {
// You can pass multiple statements in lambda expression
Sayable person = (message)->
{
String str1 = "I would like to say, ";
String str2 = str1 + message;
return str2;
};
System.out.println(person.say("time is precious."));
}
}
立即测试
输出:
I would like to say, time is precious.
Java Lambda表达式示例:创建线程 你可以使用lambda表达式来运行线程。在下面的示例中, 我们通过使用lambda表达式实现run方法。
public class LambdaExpressionExample9{
public static void main(String[] args) {
//Thread Example without lambda
Runnable r1=new Runnable(){
public void run(){
System.out.println("Thread1 is running...");
}
};
Thread t1=new Thread(r1);
t1.start();
//Thread Example with lambda
Runnable r2=()->
{
System.out.println("Thread2 is running...");
};
Thread t2=new Thread(r2);
t2.start();
}
}
立即测试
输出:
Thread1 is running...
Thread2 is running...
Java lambda表达式可以在收集框架中使用。它提供了有效而简洁的方法来迭代, 过滤和获取数据。以下是一些lambda和提供的示例。
Java Lambda表达式示例:比较器
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class Product{
int id;
String name;
float price;
public Product(int id, String name, float price) {
super();
this.id = id;
this.name = name;
this.price = price;
}
}
public class LambdaExpressionExample10{
public static void main(String[] args) {
List<
Product>
list=new ArrayList<
Product>
();
//Adding Products
list.add(new Product(1, "HP Laptop", 25000f));
list.add(new Product(3, "Keyboard", 300f));
list.add(new Product(2, "Dell Mouse", 150f));
System.out.println("Sorting on the basis of name...");
// implementing lambda expression
Collections.sort(list, (p1, p2)->
{
return p1.name.compareTo(p2.name);
});
for(Product p:list){
System.out.println(p.id+" "+p.name+" "+p.price);
} }
}
立即测试
输出:
Sorting on the basis of name...
2 Dell Mouse 150.0
1 HP Laptop 25000.0
3 Keyboard 300.0
Java Lambda表达式示例:过滤器收集数据
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
class Product{
int id;
String name;
float price;
public Product(int id, String name, float price) {
super();
this.id = id;
this.name = name;
this.price = price;
}
}
public class LambdaExpressionExample11{
public static void main(String[] args) {
List<
Product>
list=new ArrayList<
Product>
();
list.add(new Product(1, "Samsung A5", 17000f));
list.add(new Product(3, "Iphone 6S", 65000f));
list.add(new Product(2, "Sony Xperia", 25000f));
list.add(new Product(4, "Nokia Lumia", 15000f));
list.add(new Product(5, "Redmi4 ", 26000f));
list.add(new Product(6, "Lenevo Vibe", 19000f));
// using lambda to filter data
Stream<
Product>
filtered_data = http://www.srcmini.com/list.stream().filter(p ->
p.price >
20000);
// using lambda to iterate through collection
filtered_data.forEach(
product ->
System.out.println(product.name+": "+product.price)
);
}
}
立即测试
输出:
Iphone 6S: 65000.0
Sony Xperia: 25000.0
Redmi4 : 26000.0
Java Lambda表达式示例:事件监听器
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class LambdaEventListenerExample {
public static void main(String[] args) {
JTextField tf=new JTextField();
tf.setBounds(50, 50, 150, 20);
JButton b=new JButton("click");
b.setBounds(80, 100, 70, 30);
// lambda expression implementing here.
b.addActionListener(e->
{tf.setText("hello swing");
});
JFrame f=new JFrame();
f.add(tf);
f.add(b);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(null);
f.setSize(300, 200);
f.setVisible(true);
}}
【Java Lambda表达式】输出:
文章图片
推荐阅读
- Java Heredocs用法实例
- Java默认方法
- Java二进制字面量
- Java注解类型
- Java 9接口private方法
- Java Base64编码和解码
- Windows 11/10如何修复Snip和Sketch不起作用(解决方法)
- Windows 11如何解决程序没有响应(修复方法教程)
- Windows 11如何修复小部件不工作/加载空白(解决办法)