当前位置:网络安全 > Java8 Lambda 表达式

Java8 Lambda 表达式

  • 发布:2023-10-02 22:07

Java Lambda 表达式

Lambda 表达式是 Java SE 8 中包含的 Java 的一项新的重要功能。它提供了一种简洁清晰的方式来使用表达式表示方法接口。在收藏库中非常有用。它有助于迭代、过滤和从集合中提取数据。

Lambda 表达式用于提供具有函数式接口的接口的实现。它节省了大量的代码。如果使用 lambda 表达式,我们不需要再次定义提供实现的方法。这里我们只写实现代码。

Java lambda 表达式被视为函数,因此编译器不会创建 .class 文件。

功能界面

Lambda 表达式提供函数式接口的实现。只有一个抽象方法的接口称为函数式接口。 Java 提供了@FunctionalInterface 注解来将接口声明为函数式接口。

为什么使用 Lambda 表达式

  • 提供执行功能的接口。
  • 更少的编码。

Java Lambda 表达式语法

(参数列表)-> {body}

Java lambda 表达式由三个部分组成。

1) 参数列表:也可以为空或非空。

2)箭头标记:用于链接参数列表和表达式主体。

3)主体:包含lambda表达式的表达式和语句。

无参数语法

() -> {
//无参数lambda的主体
}

单参数语法

(p1) -> {
//单参数lambda的主体
}

双参数语法

(p1,p2) -> {
//多参数lambda的主体
}

让我们看看没有实现 Java lambda 表达式的情况。这里我们不使用 lambda 表达式来实现一个接口。

无 Lambda 表达式

可绘制界面{
公共无效绘制();
}
公共类 LambdaExpressionExample {
公共静态无效主(字符串[] args){
整数宽度=10;

//没有lambda,使用匿名类的Drawable实现
可绘制 d=new 可绘制(){
public void draw(){System.out.println("绘图"+width);}
};
d.绘制();
}
}

输出:

图10

Java Lambda 表达式示例

现在,我们将借助Java lambda表达式来实现上面的示例。

@FunctionalInterface //可选
可绘制界面{
公共无效绘制();
}

公共类 LambdaExpressionExample2 {
公共静态无效主(字符串[] args){
整数宽度=10;

//与拉姆达
可绘制 d2=()->{
System.out.println("绘图"+width);
};
d2.draw();
}
}

输出:

图10

Lambda 表达式可以有零个或任意数量的参数。让我们看一个例子:

Java Lambda 表达式示例:无参数

界面可说{
公共字符串说();
}公共类 LambdaExpressionExample3{
公共静态无效主(字符串[] args){
可说 s=()->{
return "我无话可说。";
};
System.out.println(s.say());
}
}

输出:

我无话可说。

Java Lambda 表达式示例:单个参数

界面可说{
公共字符串说(字符串名称);
}

公共类 LambdaExpressionExample4{
公共静态无效主(字符串[] args){

// 带有单个参数的 Lambda 表达式。
可说 s1=(名称)->{
返回“你好,”+姓名;
};
System.out.println(s1.say("Sonoo"));

// 可以省略函数括号
可说 s2= 名称 ->{
返回“你好,”+姓名;
};
System.out.println(s2.say("Sonoo"));
}
}

输出:

你好,园野
你好,索努

Java Lambda 表达式示例:多个参数

接口可添加{
int add(int a,int b);
}

公共类 LambdaExpressionExample5{
公共静态无效主(字符串[] args){// lambda 表达式中的多个参数
可添加 ad1=(a,b)->(a+b);
System.out.println(ad1.add(10,20));

// lambda 表达式中具有数据类型的多个参数
可加 ad2=(int a,int b)->(a+b);
System.out.println(ad2.add(100,200));
}
}

输出:

30
300

Java Lambda 表达式示例:带或不带 return 关键字

在Java lambda表达式中,如果只有一条语句,可以使用return关键字,也可以不使用return关键字。当 lambda 表达式包含多个语句时,必须使用 return 关键字。

接口可添加{
int add(int a,int b);
}

公共类 LambdaExpressionExample6 {
公共静态无效主(字符串[] args){

// 不带 return 关键字的 Lambda 表达式。
可添加 ad1=(a,b)->(a+b);
System.out.println(ad1.add(10,20));

// 带有 return 关键字的 Lambda 表达式。
可添加 ad2=(int a,int b)->{
返回(a+b);
    };
System.out.println(ad2.add(100,200));
}
}

输出:

30
300

Java Lambda 表达式示例:Foreach 循环

导入java.util.*;公共类 LambdaExpressionExample7{
公共静态无效主(字符串[] args){

List list=new ArrayList();
列表.add(“ankit”);
list.add("mayank");
list.add("irfan");
列表.add(“jai”);

列表.forEach(
(n)->System.out.println(n)
);
}
}

输出:

套件
玛雅克
伊凡
贾伊

Java Lambda 表达式示例:多条语句

@FunctionalInterface
接口可说{
字符串说(字符串消息);
}

公共类 LambdaExpressionExample8{
公共静态无效主(字符串[] args){

// 可以在 lambda 表达式中传递多个语句
可说的人 = (消息)-> {
String str1 = "我想说,";
字符串 str2 = str1 + 消息;
返回str2;
};
System.out.println(person.say("时间很宝贵。"));
}
}

输出:

我想说,时间很宝贵。

Java Lambda 表达式示例:创建线程

您可以使用 lambda 表达式来运行线程。在以下示例中,我们通过使用 lambda 表达式实现运行方法。

公共类 LambdaExpressionExample9{
公共静态无效主(字符串[] args){

//没有 lambda 的线程示例
可运行 r1=new 可运行(){
公共无效运行(){
System.out.println("线程1正在运行...");
}
};
线程 t1=新线程(r1);
t1.start();
//带有 lambda 的线程示例
可运行 r2=()->{
System.out.println("线程2正在运行...");
};
线程 t2=新线程(r2);
t2.start();
}
}

输出:

线程1正在运行...
线程2正在运行...

Java lambda 表达式可以在集合框架中使用。它提供了高效、简洁的方法来迭代、过滤和获取数据。以下是一些 lambda 表达式和示例。

Java Lambda 表达式示例:比较器

导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.List;
产品类{
整数ID;
字符串名称;
浮动价格;
公共产品(int id,字符串名称,浮动价格){
极好的();
这个.id = id;
www.sychzs.cn = 名称;
这个.价格 = 价格;
}
}
公共类 LambdaExpressionExample10{
公共静态无效主(字符串[] args){List list=new ArrayList();

//添加产品
list.add(新产品(1,"惠普笔记本电脑",25000f));
list.add(新产品(3,"键盘",300f));
list.add(new Product(2,"戴尔鼠标",150f));

System.out.println("根据名称排序...");

// 实现 lambda 表达式
Collections.sort(列表,(p1,p2)->{
return p1.name.compareTo(www.sychzs.cn);
});
for(产品 p:列表){
System.out.println(www.sychzs.cn+" "+www.sychzs.cn+" "+p.price);
}

}
}

输出:

按名称排序...
2 戴尔鼠标 150.0
1 惠普笔记本电脑 25000.0
3 键盘 300.0

Java Lambda 表达式示例:过滤器收集数据

导入java.util.ArrayList;
导入java.util.List;
导入 www.sychzs.cn;
产品类{
整数ID;
字符串名称;
浮动价格;
公共产品(int id,字符串名称,浮动价格){
极好的();
这个.id = id;
www.sychzs.cn = 名称;
这个.价格 = 价格;
}
}
公共类 LambdaExpressionExample11{公共静态无效主(字符串[] args){
List list=new ArrayList();
list.add(新产品(1,"三星 A5",17000f));
list.add(新产品(3,"iPhone 6S",65000f));
list.add(新产品(2,"索尼 Xperia",25000f));
list.add(新产品(4,"诺基亚 Lumia",15000f));
list.add(新产品(5,"Redmi4",26000f));
list.add(新产品(6,"Lenevo Vibe",19000f));

// 使用lambda过滤数据
Streamfiltered_data = www.sychzs.cn().filter(p -> p.price > 20000);

// 使用 lambda 迭代集合
过滤数据.forEach(
产品 -> System.out.println(产品.名称+": "+产品.价格)
);
}
}

输出:

iPhone 6S:65000.0
索尼 Xperia:25000.0
红米4:26000.0

Java Lambda 表达式示例:事件监听器

导入javax.swing.JButton;
导入 javax.swing.JFrame;
导入 javax.swing.JTextField;
公共类 LambdaEventListenerExample {
公共静态无效主(字符串[] args){
JTextField tf=new JTextField();tf.setBounds(50, 50,150,20);
JButton b=new JButton("点击");
b.setBounds(80,100,70,30);

// 此处实现 lambda 表达式。
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);

}

}

输出:

相关文章

热门推荐