您的位置:首页 > 编程语言 > Java开发

java8学习 -- lambda表达式

2016-07-11 16:10 495 查看
参考文章 http://f.dataguru.cn/thread-656507-1-2.html

字符串排序:

public class Test2 {
/**
* 对字符串排序
*/
public void strSortForList(List<String> list){
// 老版本java写法
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String a, String b) {
return b.compareTo(a);
}
});

// lambda表达式写法
Collections.sort(list, (String a,String b) -> {
return b.compareTo(a);
});

// 简化版
Collections.sort(list,(a,b) -> b.compareTo(a));
}

public static void main(String[] args) {
List<String> names = Arrays.asList("peter", "anna", "mike", "xenia");
new Test2().strSortForList(names);
System.out.println(names); // 输出结果:[xenia, peter, mike, anna]
}
}


每一个lambda表达式都对应一个类型,通常是接口类型。而"函数式接口"是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。

/**
* 每一个lambda表达式都对应一个类型,通常是接口类型。
* 而"函数式接口"是指仅仅只包含一个抽象方法的接口,
* 每一个该类型的lambda表达式都会被匹配到这个抽象方法。
*/
@FunctionalInterface
interface Converter<F, T> {
// 每个该类型的lambda表达式都会被匹配到这个方法
T convert(F from);
// 函数式接口(@FunctionalInterface)只包含一个抽象方法(不包括Object的方法)
public abstract boolean equals(Object obj);
}

public class Test3 {
public static void main(String[] args) {
Converter<String, Integer> converter = (from) -> Integer.valueOf(from);
// 上一行代码还可以通过静态方法引用来表示:
Converter<String, Integer> converter = Integer::valueOf;

Integer converted = converter.convert("123");
System.out.println(converted);    // 123
}
}


另外java8接口可以有默认方法,但要加上default,如下:

@FunctionalInterface
interface Converter<F, T> {
T convert(F from);
public abstract boolean equals(Object obj);

// 另外java8接口可以有默认方法,但要加上default
public default String trim(String str){return str.trim();}
public default String trim(){return null;}
}

public class Test3 {
public static void main(String[] args) {
Converter<String, Integer> converter = Integer::valueOf;
System.out.println(converter.trim("  abc  ")); // abc
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: