Java8

lambda表达式

  1. 代替匿名类
new Thread(
 () -> System.out.println("In Java8, Lambda expression rocks !!") ).start();

表达式的用法
(params) -> expression
(params) -> statement
(params) -> { statements }

  1. 事件写法或者comparator
    private void compare(Listnames){
    Collections.sort(names,(s1,s2)->s1.compareTo(s2))
    }
  2. 迭代
// 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的方法引用更方便,方法引用由::双冒号操作符标示,
// 看起来像C++的作用域解析运算符
features.forEach(System.out::println);

4.函数式接口Predicate

public static void filter(List names, Predicate condition) {
    names.stream().filter((name) -> (condition.test(name))).forEach((name) -> {
        System.out.println(name + " ");
    });
}

Bipredicate是接受两个参数的

BiPredicate sbp = String::equals;
//等效
BiPredicate sbp2 = (x, y) -> x.equals(y);
System.out.print(sbp.test("A", "A"));

5.在lambda表达式中加入Predicate
并且同时使用and或者or条件

Predicate startsWithC = (n) -> n.startsWith("C");
Predicate startsWithZ = (n) -> n.startsWith("Z");   
tests.stream().filter(startsWithC.or(startsWithZ)).forEach(System.out::println);

6.map和reduce
reduce可以将所有的数据合成一个,是一个折叠操作,可以使用sum()等方法,也可以自定义

List 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得到一个新的list
在这里filter不是丢弃部分,而是形成一个新的符合条件的list

names.stream().filter(n->n.length()>1).collect(Collectors.toList())

8.map-对列表中的每一个元素都应用

names.stream().map(n->n.toUpperCase()).collect(Collectors.toList())

9.distinct-复制不同的值,创建一个子列表

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 类是一个可以为null的容器对象,可以存放值,也可以直接存放null,这样就不用显式进行空值检测,很好的解决空指针异常。

 Optional a = Optional.ofNullable(null);
a.isPresent()-----false
a.isEmpty()-----true

你可能感兴趣的:(Java8)