Java1.8你还不知道的新特性
Lambda 表达式
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
使用 Lambda 表达式可以使代码变的更加简洁紧凑。
1 | String[] arr = {"Google", "Baidu", "Taobao", "Sina", "Runoob"}; |
Stream流式操作
问题:
给定一个字符串元素列表,如下所示:1
["1", "2", "bilibili", "of", "codesheep", "5", "at", "BILIBILI", "codesheep", "23", "CHEERS", "6"]
找出所有长度 >=5 的字符串,并且忽略大小写、去除重复字符串,然后按字母排序,最后用“-”连接成一个字符串输出!
来,小伙伴们,5分钟,搞定它。。。什么搞定不了,该去补习补习了。
那么使用Java8怎么搞定呢,开启装逼模式:1
2
3
4
5
6
7
8
9
10String result = list.stream() // 首先将列表转化为Stream流
.filter( i -> !isNum(i) ) // 筛选出字母型字符串
.filter( i -> i.length() >= 5 ) // 其次筛选出长度>=5的字符串
.map( i -> i.toLowerCase() ) // 字符串统一转小写
.distinct() // 去重操作来一下
.sorted( Comparator.naturalOrder() ) // 字符串排序来一下
.collect( Collectors.joining("-") ); // 连词成句来一下,完美!
System.out.println(result);
输出:bilibili-cheers-codesheep
这操作够sao了吧!
Consumer接口
Consumer的语义是消费的意思,了解一些消息队列的同学,肯定对这个单词,有一定的理解。
看个简单的例子:打印3次 Hello World!
1
2
3
4
5
6
7
8
9// 原来的写法
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
//使用Consumer接口
Consumer c = System.out::println;
c.andThen(c).andThen(c).accept("Hello World!");
搞定。
一个简单的平方计算:1
2Consumer<Integer> square = x -> System.out.println("print square : " + x * x);
square.accept(2);
Optional接口
Optional本质是个容器,你可以将你的变量交由它进行封装,这样我们就不用显式对原变量进行 null值检测,防止出现各种空指针异常。举例:1
2
3
4
5
6
7
8
9public Integer getScore( Student student ){
if(student != null){
Subject sub = student.getSubject();
if(sub != null){
return sub.getScore();
}
}
return null;
}
多嵌套的 if 判空,这么处理当然可以,然而有更好的解决办法哦。1
2
3
4
5
6public Integer getScore(Student student){
return Optional.ofNullable(student)
.map(Student::getSubject)
.map(Subject::getScore)
.orElse(null);
}
完美实现。
更多文章请关注微信公众号: zhiheng博客
如果文章对你有用,转发分享、点赞赞赏才是真爱 [斜眼笑]