lambda表达式
- 代替匿名类
new Thread(
() -> System.out.println("In Java8, Lambda expression rocks !!") ).start();
表达式的用法
(params) -> expression
(params) -> statement
(params) -> { statements }
- 事件写法或者comparator
private void compare(Listnames){
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的方法引用更方便,方法引用由::双冒号操作符标示,
// 看起来像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