lambda表達(dá)式
- 代替匿名類
new Thread(
() -> System.out.println("In Java8, Lambda expression rocks !!") ).start();
表達(dá)式的用法
(params) -> expression
(params) -> statement
(params) -> { statements }
- 事件寫(xiě)法或者comparator
private void compare(List<String>names){
Collections.sort(names,(s1,s2)->s1.compareTo(s2))
} - 迭代
// Java 8之前:
List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
for (String feature : features) {
System.out.println(feature);
}
// Java 8之后:
List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
features.forEach(n -> System.out.println(n));
// 使用Java 8的方法引用更方便,方法引用由::雙冒號(hào)操作符標(biāo)示,
// 看起來(lái)像C++的作用域解析運(yùn)算符
features.forEach(System.out::println);
4.函數(shù)式接口Predicate
public static void filter(List names, Predicate condition) {
names.stream().filter((name) -> (condition.test(name))).forEach((name) -> {
System.out.println(name + " ");
});
}
Bipredicate是接受兩個(gè)參數(shù)的
BiPredicate<String, String> sbp = String::equals;
//等效
BiPredicate<String, String> sbp2 = (x, y) -> x.equals(y);
System.out.print(sbp.test("A", "A"));
5.在lambda表達(dá)式中加入Predicate
并且同時(shí)使用and或者or條件
Predicate<String> startsWithC = (n) -> n.startsWith("C");
Predicate<String> startsWithZ = (n) -> n.startsWith("Z");
tests.stream().filter(startsWithC.or(startsWithZ)).forEach(System.out::println);
6.map和reduce
reduce可以將所有的數(shù)據(jù)合成一個(gè)渊啰,是一個(gè)折疊操作绍傲,可以使用sum()等方法德挣,也可以自定義
List<Integer> prices = Arrays.asList(100, 200);
prices.stream().map((cost)->(cost+ .12*cost)).forEach(System.out::println);
prices.stream().map((cost)->(cost+.12*cost)).reduce((sum,cost)->(sum+cost)).get()乍迄;
7.用filter得到一個(gè)新的list
在這里filter不是丟棄部分,而是形成一個(gè)新的符合條件的list
names.stream().filter(n->n.length()>1).collect(Collectors.toList())
8.map-對(duì)列表中的每一個(gè)元素都應(yīng)用
names.stream().map(n->n.toUpperCase()).collect(Collectors.toList())
9.distinct-復(fù)制不同的值货抄,創(chuàng)建一個(gè)子列表
prices.stream().distinct().collect(Collectors.toList())
10.一些方法
map教沾,foreach,limit,sorted,collectors
Random random = new Random(); random.ints().limit(10).forEach(System.out::println);
random.ints().limit(10).sorted().forEach(System.out::println);
random.ints().limit(10).sorted()..collect(Collectors.toList())
random.ints().limit(10).sorted()..collect(Collectors.joining(", "));
原文鏈接:
https://www.cnblogs.com/coprince/p/8692972.html
optional類
Optional 類是一個(gè)可以為null的容器對(duì)象蒲跨,可以存放值,也可以直接存放null授翻,這樣就不用顯式進(jìn)行空值檢測(cè)或悲,很好的解決空指針異常。
Optional<Integer> a = Optional.ofNullable(null);
a.isPresent()-----false
a.isEmpty()-----true