java8之Lambda表达式

什么是lambda表达式:lambda expression
    Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction)
    Lambda表达式是一个匿名函数,即没有函数名的函数。
    Lambda表达式可以表示闭包
    ----百度百科

lambda表达式语法:
    (parameters) -> expression
    (parameters) ->{ statements; }

lambda表达式的重要特征:
    可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
    可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
    可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
    可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值
    
lambda表达式的作用:
    替代匿名内部类:即匿名内部类实现方式的简写(个人理解)

    以更简洁的方式替换方法参数中的匿名内部类(一般参数为常用函数式接口的匿名内部类)

lambda表达式使用示例:

list集合遍历:

//定义list集合
List<String> names = Arrays.asList("peter", "anna", "mike", "xenia");

//方式1:传统方法对list集合进行遍历
for (String s : names) {
    System.out.println(s);
}
方式2、3为同种方法//
//方式2:Lambda表达式对list集合进行遍历
names.forEach(name -> System.out.println(name));
names.forEach(System.out::println);    //更简洁的写法

//方式3:Lambda表达式对list集合进行遍历
Consumer<String> consumer = name -> System.out.print(name);
names.forEach(consumer);

///体现出lambda表达式实际是替代匿名内部类的作用//
//方式4:匿名内部类方式对list集合进行遍历  
names.forEach(new Consumer<String>() {

    @Override
    public void accept(String name) {
        // 匿名内部类方式实现list集合遍历
        System.out.println(name);
	}

});

map集合遍历:

//定义map集合
Map<Integer, String> map = new HashMap<Integer,String>();
map.put(1, "peter");
map.put(2, "anna");
map.put(3, "mike");
map.put(4, "xenia");

//方式1:传统方法遍历map集合 map.keySet() map.values() map.entrySet()
for (Integer key : map.keySet()) {
	System.out.println("key: " + key);
	System.out.println("value: " + map.get(key));
}
System.out.println("====================");
//方式2:Lambda表达式对map集合进行遍历	
map.forEach((k,v) -> {
	System.out.println("key:" + k);
	System.out.println("value:" + v);
});
System.out.println("====================");
//方式3:Lambda表达式对map集合进行遍历 
BiConsumer<Integer,String> biConsumer = (k,v) ->{
	System.out.print("key:" + k + "  ");
	System.out.print("value:" + v + "===");
	//结果:key:1  value:peter===key:2  value:anna===key:3  value:mike===key:4  value:xenia===
};
map.forEach(biConsumer);
System.out.println("====================");
//方式4:匿名内部类方式对map集合进行遍历 
map.forEach(new BiConsumer<Integer, String>() {

	@Override
	public void accept(Integer k, String v) {
		
		System.out.println("key:" + k);
		System.out.println("value:" + v);
	}
});

集合排序:

//定义list集合
List<String> names = Arrays.asList("peter", "anna", "mike", "xenia");
//Lambda表达式对list集合进行排序
Collections.sort(names, (a,b) -> b.compareTo(a));

/体现出lambda表达式实际是替代匿名内部类的作用//
//匿名内部类方式对list集合进行排序
Collections.sort(names, new Comparator<String>() {

	@Override
	public int compare(String a, String b) {
		//匿名内部类方式实现集合排序
		return b.compareTo(a);
	}
});

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值