java8新特性

函数式接口

只有一个抽象接口,方便使用lambda表示。可以有若干default修饰的或static修饰的普通方法。子类可以实现抽象方法和重写default方法。在接口上使用@FunctionalInterface,在编译期检查是否符合函数式接口。

@FunctionalInterface
public interface DemoInterface {

    Optional sayHello();

    default Optional hello1() {
        return Optional.ofNullable("hello");
    }

    default Stream hello2() {
        return Stream.of("a", "b", "c");
    }

    static Optional hello3() {
        return Optional.ofNullable(0);
    }

    static Stream hello4() {
        return Stream.of(1, 2, 3);
    }
}

public class DemoImpl implements DemoInterface {
    @Override
    public Optional sayHello() {

        hello1();
        hello2();

        DemoInterface.hello3();
        DemoInterface.hello4();
        return Optional.empty();
    }
}

方法引用

参考官方文档。

public class Car {

    public static Car create(Supplier supplier) {
        return supplier.get();
    }

    public static void collide(Car car) {
        System.out.println("collide:" + car.toString());
    }

    public void repair() {
        System.out.println("repair:" + this.toString());
    }

    public void follow(Car car) {
        System.out.println("follow:" + car.toString());
    }

    public static void main(String[] args) {
        // 构造器
        Car car = Car.create(Car::new);

        List cars = Arrays.asList(car);
        // 静态方法
        cars.forEach(Car::collide);
        // 普通方法
        cars.forEach(Car::repair);
        // 有一个参数的方法
        cars.forEach(car::follow);
    }
}

引用

http://ifeve.com/java-8-features-tutorial/

你可能感兴趣的:(java8新特性)