Java 8 新特性

Java 8 新特性

1. Lambda表达式

Lambda 表达式是一个匿名函数,可以作为一个参数传递,使用Lambda表达式必须使用函数式接口,具体可以见下个章节。

2. 函数式接口

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法的接口,通过@FunctionalInterface申明函数式接口。

@FunctionalInterface
public interface MyFunctionInterface {
   
    void execute();
}

典型使用场景就是作为方法的参数(可以用于模板模式)

public class Module {
   
    public void execute(MyFunctionInterface inter) {
   
        // 前置操作
        ...
        inter.execute();
        // 后置操作
        ...
    }
}

可以作为Lambda表达式调用,有些场景的代码执行后,结果不一定会被使用,从而造成性能浪费。而Lambda表达式是延迟执行的,这正好可以作为解决方案,提升性能。例如日志打印场景。

    public static void main(String[] args) {
   
        Module module = new Module();
        module.execute(() -> {
   
            System.out.println("Lambda表达式应用");
        });
    }

2.1 常用函数式接口

  • java.util.function.Supplier
  • java.util.function.Consumer
  • java.util.function.Predicate
  • java.util.function.Function
   public static void main(String[] args) {
   
        String str = "xxx,1991";
        int age = getAgeNum(str, s -> s.split(",")[1],
                s -> Integer.parseInt(s),
                n -> 2021 - n);
        System.out.println(age);
    }

    private static int getAgeNum(String str, Function<String, String> one,
                                 Function<String, Integer> two,
                                 Function<Integer, Integer> three) {
   
        return one.andThen(two).andThen(three).apply(str);
    }

3. 方法引用

Java 8 支持方法引用, 可以直接引用已有Java类或对象的方法或构造器。方法引用与lambda表达式结合使用,可以进一步简化代码。

Java 8 有四种引用方式

  • 静态方法引用 ClassName::staticMethodName
  • 构造器引用 ClassName::new
  • 类的任意对象的实例方法引用 ClassName::instanceMethodName
  • 特定对象的实例方法引用 object::instanceMethodName

lambda表达式可用方法引用代替的场景可以简要概括为:lambda表达式的主体仅包含一个表达式,且该表达式仅调用了一个已经存在的方法。方法引用的通用特性:方法引用所使用方法的入参和返回值与lambda表达式实现的函数式接口的入参和返回值一致。

代码示例:

    public static void main(String[] args) {
   
        List<String> strList = Arrays.asList(new String[]{
   "a", "c", "b"});
        strList.stream().sorted((s1, s2) -> s1.compareToIgnoreCase(s2)).forEach(s -> System.out.println(s));
    }

使用方法引用后

    public static void main(String[] args) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值