java8新特性一:lambda表达式

简单的用我的代码来说明一下这个表达式,如有错误请指出,非常感谢;
总结一下这个帖子
1)别人的例子,
2)自己写的例子,接口有参数,无参数,实现方法的参数情况说明
先看别人的例子
通过这个比较接口来实现一个lambda表达式,下面我自己写一个接口来实现说明多种情况。

package org.xxxx.demo01;
 
import java.util.Arrays;
import java.util.Comparator;
 
public class Demo01 {
	public static void main(String[] args) {
		// 定义字符串数组
		String[] strArr = { "abc", "cd", "abce", "a" };
 
		// 传统方法
		// 匿名内部类
		Arrays.sort(strArr, new Comparator<String>() {
 
			@Override
			public int compare(String s1, String s2) {
				return Integer.compare(s2.length(), s1.length());
			}
		});
 
		// 输出排序结果
		for (String s : strArr) {
			System.out.println(s);
		}
		System.out.println("---------------------");
 
		// Lambda表达式
		Arrays.sort(strArr, (s1, s2) -> Integer.compare(s2.length(), s1.length()));
 
		// 输出
		for (String s : strArr) {
			System.out.println(s);
		}
}		

我自己写的一个简单的demo

//先定义一个接口
public interface Test {
    Integer ces(Integer s1,Integer s2);
}

随后是测试类

import javax.sound.midi.Soundbank;
import java.util.Arrays;
import java.util.Comparator;

public class LamdbaTest {
    public static void main(String[] args) {

       Integer integer= LamdbaTest.test(new Test() {
            @Override
            public Integer ces(Integer s1, Integer s2) {
                return s1-s2;
            }
        });
        System.out.println(integer);
        //lambda表达式 //执行语句只有一行代码,可以直接写 
       Integer integer2 = LamdbaTest.test((s1,s2)->s1-s2);
       //语句不止一行,那就写代码块
       LamdbaTest.test((s1,s2)->{
           System.out.println("你好呀");
           return s1-s2;
       });
        System.out.println(integer2);
    }


    //实现带返回值的函数 不带外部参数
    //写死内部参数
    public  static  Integer test(Test ces){
       return ces.ces(1,2);
    }

}

输出结果

-1
你好呀
-1

可以看到,方法test里面带有接口参数,而这个接口的方法是需要被实现的
同样我们可以给这个方法加上其他的参数
例如test(int[] arr,Test ces)需要说明的是,外部参数会被当做final的 使用注意
然后根据你的需求具体实现

在来一个接口没有参数的

public interface Test {
    void ces();
}
import javax.sound.midi.Soundbank;
import java.util.Arrays;
import java.util.Comparator;

public class LamdbaTest {
    public static void main(String[] args) {

       LamdbaTest.test(new Test() {
           @Override
           public void ces() {
               System.out.println("你好呀");
           }
       });
       LamdbaTest.test(()->{
           System.out.println("我们好");
           System.out.println("好个鸭儿");
       });
    }


    //实现带返回值的函数 不带外部参数
    //写死内部参数
    public  static  void test(Test ces){
         ces.ces();
    }

}

执行结果

你好呀
我们好
好个鸭儿

诶,这个时候就有细心的读者问了,这样子到底有什么用呢
搬一下别人的话

通过上面的两个需求,发现Lamdba表达式很简单,那何时使用呢

需要显示创建函数式接口对象的地方,都可以使用

实际上函数式接口的转换是Lambda表达式唯一能做的事情

即lambda必须和Functional Interface配套使用

主要用于替换以前广泛使用的内部匿名类,各种回调

比如事件响应器、传入Thread类的Runnable等 ————————————————

这篇文档到此结束,慢慢来,后面在说用法
谢谢三连

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值