Lambda的范圍
lambda可以訪問局部對應的外部區域的局部final變量,以及成員變量和靜態變量。
訪問成員變量
public void doSomething(){
final String p1 = “賤明”;
final String p2 = “學友”;
Formula function = (person1, person2) -》 p1.compareTo(p2);
}
與java8以下版本不同的是,p1 p2你可以不修飾成final 也不會報錯,但是如果你想修改他們,編譯器則會告訴你這是不被允許的。
訪問成員變量和靜態變量
public void doSomething(){;
Formula function = (person1, person2) -》{
dehua = “賤明”;
xueyou=“學友”;
return dehua.compareTo(xueyou);
};
}
內置函數式接口
java8 api中提供了很多內置函數式接口,而且有些接口其實在Google Guava中已經實現了,很大程度的降低了程序員的工作負擔。
Predicates
Predicate是一個布爾類型的函數,該函數只有一個輸入參數,他包含了多種默認實現。
public static void main(String[] args) {
Predicate《String》 predicate = (s) -》 s.contains(“賤明”);
String var1 = “牛賤明”;
predicate.test(var1); // true
predicate.negate().test(var1); // false
Predicate《Boolean》 nonNull = Objects::nonNull;
Predicate《Boolean》 isNull = Objects::isNull;
Predicate《String》 isEmpty = String::isEmpty;
Predicate《String》 isNotEmpty = isEmpty.negate();
isNotEmpty.and(isEmpty).test(var1);
}
Functions
Function接口接收一個參數,并返回單一的結果。默認方法可以將多個函數串在一起
public static void main(String[] args) {
Function《String, Integer》 toInteger = Integer::valueOf;
Function《String, String》 backToString = toInteger.andThen(String::valueOf);
System.out.println(toInteger.apply(“123”));
System.out.println(backToString.apply(“123”));
}
Suppliers
Supplier接口產生一個給定類型的結果。與Function不同的是,Supplier沒有輸入參數。
Supplier《Person》 personSupplier = Person::new;
Person p = personSupplier.get(); // new Person
Consumers
Consumer代表了在一個輸入參數上需要進行的操作。
Consumer《Person》 greeter = (p) -》 System.out.println(“Hello, ” + p.getName());
greeter.accept(new Person(“賤明”));
Comparators
Comparator接口在早期的Java版本中非常著名。Java 8 為這個接口添加了不同的默認方法。
Comparator《Person》 comparator = (p1, p2) -》 p1.getName().compareTo(p2.getName());
Person p1 = new Person(“賤明”);
Person p2 = new Person(“學友”);
System.out.println(comparator.compare(p1, p2)); // 》 1105
System.out.println(comparator.reversed().compare(p1, p2)); // 《 -1105
Optionals
Optional不是一個函數式接口,而是一個精巧的工具接口,用來防止NullPointerException產生。
Optional是一個簡單的值容器,這個值可以是null,也可以是non-null??紤]到一個方法可能會返回一個non-null的值,也可能返回一個空值。為了不直接返回null,我們在Java 8中就返回一個Optional。
Optional《String》 optional = Optional.of(“賤明”);
System.out.println(optional.isPresent()); // true
System.out.println(optional.get()); // 賤明
System.out.println(optional.orElse(“學友”)); // 賤明
optional.ifPresent((s) -》 System.out.println(s.charAt(0)));
評論
查看更多