java8学习 -- lambda表达式

参考文章 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
    }
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值