java8 新特性

看了下java8的新特性,記下筆記,java

1.添加了Optional,ide

這個是guava裏面出現的,如今java8裏面也支持了,Optional是用來處理null值的。函數

用法基本和guava裏面的一致,this

public static void main(String[] args) {
        Optional<String> str = Optional.of("abc");
        System.out.println(str.isPresent());
        System.out.println(str.get());
        
        str = Optional.empty();
        System.out.println(str.isPresent());
        System.out.println(str.orElse("abcd"));
    }

輸出的值爲:spa

true
abc
false
abcdcode

當裏面有值的時候,使用orElse是會獲得原來的值的,如當orm

Optional<String> str = Optional.of("abc");
       
        System.out.println(str.orElse("123"));

這時輸出的是abcblog

2.接口中能添加默認方法了,示例以下接口

public interface Formula {
    double calculate(int a);

    /**
     * java8 新特性 接口中能添加默認方法,又叫作擴展方法,實現這個接口,不須要重寫默認方法,能夠直接用
     * @param a
     * @return
     */
    default double sqrt(int a) {
        return Math.sqrt(a);
    }
}

默認方法能夠實現,須要用default關鍵字get

實現這個接口的類不須要重寫默認方法

3.@FunctionalInterface 註解,

用這個註解標記的接口會被認爲是函數接口,即只有一個抽象方法(默認方法不是抽象方法),當有多個抽象方法的時候會出現編譯錯誤提示

4.lambda表達式,這個是不少人都知道的變化

當實現函數式接口的時候能夠使用lambda表達式

Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String a, String b) {
                return b.compareTo(a);
            }
        });

Collections.sort(list, (String a, String b) -> b.compareTo(a));

 Collections.sort(list, (String a, String b) -> {
           return b.compareTo(a);
        });

Collections.sort(list,(a,b) -> b.compareTo(a));

這上面四種寫法是等效的

lambda表示式的基本形式爲 () -> {}

當整個實現寫在一行時,能夠去掉小括號和return關鍵字,()裏面的是參數,能夠省略參數類型

5.方法和構造器的引用

示例:

public class Person {
    private String firstName;

    private String lastName;

    Person(){}

    Person(String firstName, String listName) {
        this.firstName = firstName;
        this.lastName = listName;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public static void main(String[] args) {
        PersonFactory<Person> factory = Person::new;
        Person person = factory.createPerson("luo","lei");
        System.out.println(person.getFirstName()+" "+person.getLastName());
    }
}
public interface PersonFactory<T extends Person> {
    T createPerson(String firstName, String lastName);
}

使用::關鍵字,能夠引用方法或構造器,這個接口只能是函數式接口

 

固然java8 還添加了一些接口,和其餘的特性,我沒看完

java8 的新特性就記錄到這裏 

相關文章
相關標籤/搜索