lambda表达式的使用

lambda表达式通常是用来实现类或接口的,优点是无须声明,也无须重写了,但是有个限制就是这个接口中只能有一个方法,因为从lambda的表达式上我们就可以看出端倪了,直接调用类,传参数,连方法名都省了,如果不止一个方法,毫无疑问会产生冲突无法识别。

java lambda表达式的优缺点:
优点:

  1. 代码简洁,开发迅速
  2. 方便函数式编程
  3. 非常容易进行并行计算
  4. java引入lambda,改善了集合操作(引入Stream API)
    缺点:
  5. 代码可读性变差
    2 .使得语言学习曲线陡峭,学习难度提升
  6. 性能方面,在非并行计算中,很多计算未必有传统的for性能要高
  7. 不容易进行调试

我写了个小demo,实现了对一个接口通过常见的三种实现方式(实现类重写方法、匿名内部类实现、lambda)的对比,其中就用到了lambda表达式。

场景:实现点击button,显示button名称。

OnClickListener.java

package com.hmkcode;

public interface OnClickListener {
	void onClick(Button button);
}

Button.java

package com.hmkcode;

@lombook
public class Button {

	private OnClickListener onClickListener;
	private String name;

	// click the button
	public void click(){
		this.onClickListener.onClick(this);
	}
}

实现一:重写onClick方法

public class App implements OnClickListener
{
    public static void main( String[] args ){...}

    public void run(){
        
        Button myButton = new Button();
        myButton.setName("MyButton");
        
        // 1. implements onClickListener
        myButton.setOnClickListener(this);
        
        // click the button
    	myButton.click();
    }
	
	@Override
	public void onClick(Button button) {
		System.out.println(button.getName() +" Clicked! - implements interface");
		
	}
}

实现二:
匿名内部类

public class App
{
    public static void main( String[] args ){...}

    public void run(){
        
        Button myButton = new Button();
        myButton.setName("MyButton");
                
        // 2. anonymous class
        myButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(Button button) {
				System.out.println(button.getName() +" Clicked! - anonymous class");
			}
		}); 
        
        // click the button
    	myButton.click();
    }
}

实现三:
lambda表达式:

public class App
{
    public static void main( String[] args ){...}

    public void run(){
        
        Button myButton = new Button();
        myButton.setName("MyButton");

        // 3. lambda
    	OnClickListener lambda = button -> { System.out.println(button.getName()+" Clicked! - lambda"); } ;
    	myButton.setOnClickListener(lambda);
		
        // click the button
    	myButton.click();
    } 
}

在我看来,一般的场景下,for循环计算处理的效率是优于lambda表达式的,lambda表达式适合用在并行计算、对集合(流处理)。对于集合类的处理,是真的方便,就是可读性太差了,而且debug也很不方便。

你可能感兴趣的:(技术,java,lambda)