4年前 (2021-04-12)  Java系列 |   抢沙发  398 
文章评分 1 次,平均分 5.0
[收起] 文章目录

java8 lambda表达式语法

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

Lambda表达式用于提供具有函数接口的实现。它节省了很多代码。对于lambda表达式,我们不需要再次定义方法来提供实现。在这里,我们只需编写实现代码。

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

Functional Interface

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

为什么使用Lambda表达式

  • 提供功能接口的实现。
  • 更少的编码。

Java Lambda表达式语法

(argument-list) -> {body}  

javalambda表达式由三个组件组成。

1. 参数列表:它可以是空的,也可以是非空的。

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

3. Body:它包含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关键字,也可以不使用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表达式示例:Comparator

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 = 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表达式示例:Event Listener 事件侦听器

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

输出:

hello swing
 

除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/1816.html

关于

发表评论

表情 格式

暂无评论

登录

忘记密码 ?

切换登录

注册