java8学习 -- lambda表达式

来源:互联网 发布:图片剪切软件下载 编辑:程序博客网 时间:2024/05/22 07:44

参考文章 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表达式都会被匹配到这个抽象方法。 */@FunctionalInterfaceinterface 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,如下:

@FunctionalInterfaceinterface 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    }}



0 0