华为721----Java8新特性_

拖着生病的身体,终于面试结束,趁着没有遗忘,先整理下

自己使用Eclipse一边写,一边感受下好了,面试时候,主要强调的是Lambda表达式,先来看看。

1. Lambda表达式

package temp;

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Java8 {

	public static void main(String[] args) {
		List<String> name = Arrays.asList("xiekai","xiaowang","xiaoxia");
		
		Collections.sort(name, new Comparator<String>() {
			public int compare(String a, String b) {
				return b.compareTo(a);
			}
		});
		
	}

}

在Collections.sort里面传入一个比较器来指定排序,创建一个匿名对象,传入sort里面。

但是java8里面,使用Lambda表达式,更简洁的。

		//Lambda表达式
		Collections.sort(name, (String a, String b)->{
			return a.compareTo(b);
		});
		System.out.println(name);
		Collections.sort(name, (String a, String b)->a.compareTo(b));
		System.out.println(name);
		Collections.sort(name, (a,b)->a.compareTo(b));
		System.out.println(name);

呀呀呀,好简洁。。。。

特别是最后一个,Java编译器可以自动推导出参数类型,所以你可以不用再写一次类型。

继续看Lambda表达式。

2. 函数式接口

        Lambda表达式是如何在java的类型系统中表示的呢?每一个lambda表达式都对应一个类型,通常是接口类型。而“函数式接口”是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。因为 默认方法 不算抽象方法,所以你也可以给你的函数式接口添加默认方法。


        我们可以将lambda表达式当作任意只包含一个抽象方法的接口类型,确保你的接口一定达到这个要求,你只需要给你的接口添加 @FunctionalInterface 注解,编译器如果发现你标注了这个注解的接口有多于一个抽象方法的时候会报错的。


@FunctionalInterface
interface Converter<F, T> {
    T convert(F from);
}
Converter<String, Integer> converter = (from) -> Integer.valueOf(from);
Integer converted = converter.convert("123");
System.out.println(converted);    // 123

需要注意如果@FunctionalInterface如果没有指定,上面的代码也是对的。


译者注 将lambda表达式映射到一个单方法的接口上,这种做法在Java 8之前就有别的语言实现,比如Rhino JavaScript解释器,如果一个函数参数接收一个单方法的接口而你传递的是一个function,Rhino 解释器会自动做一个单接口的实例到function的适配器,典型的应用场景有 org.w3c.dom.events.EventTarget 的addEventListener 第二个参数 EventListener。

上述转自 http://www.jb51.net/article/48304.htm

3. 方法与构造函数的引用








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值