Java8新特性学习

1 简述

公司自年初终于开始使用java8作为项目的标准jdk,在开发过程中,逐渐认识到java8的很多新特性,确实很方便.其中内容的核心,在于函数式编程,即将函数本身作为对象参数去处理.其中涉及到三个关键新特性:

  1. lambda表达式(及函数式接口)
  2. stream
  3. 方法引用
    这三个新特性的使用是相辅相成的,特别是前两者,作为本文的重点来说.

参考链接:

  1. Java8新特性,你应该了解这些

2 新特性的适用场景

lambda表达式,就我现在的使用经验,其实就是与JavaScript中的箭头函数是一样的.只不过js一直都支持将函数看做是对象参数,所以箭头函数对js更像一个语法糖.但lambda表达式对于java的改变就重要很多了,直接允许了函数式编程,这是此前版本所无法实现的.
lambda表达式最常见的使用场景是和stream一同使用.stream的详细介绍建议阅读参考链接了解.虽然适用于很多种类型,但在开发项目时,用到最多的,还是集合.

//演示代码
List<String> output = wordList.stream().
map(str->str.toUpperCase.
collect(Collectors.toList());

以下是我对比java8和js集合中的方法,列举的一个表格(可以看到,js此前有的方便方法,java8基本都能做到):

streamTypejava8js作用
intermediatemapmap将stream中的每一个元素,映射为另外一个元素
intermediateflatMapflat,flatMap将stream中的层次结构扁平化
intermediatefilterfilter对每一个元素进行测试,通过测试的元素留下来
terminalforEachforEach对每一个元素执行操作
intermediatepeek对每一个元素执行操作
terminalfindFirstfind查找符合条件的第一个元素
terminalreducereduce依序将元素组合起来得到一个新的值
intermediatelimitslice返回前n个元素
intermediateskipslice跳过前n个元素(返回剩下的元素)
intermediatesortedsort对元素进行排序
terminalmin最小值
terminalmax最大值
intermediatedistinct去除重复值
terminalallMatchevery全部元素符合
terminalanyMatchsome任一元素符合
terminalnoneMatch没有元素符合

以上仅为常用方法.streamType表示的是流操作的类型,intermediate类型操作后仍可继续按照流操作,terminal类型操作则会终止流操作.

参考链接:

  1. Java 8 中的 Streams API 详解
  2. js Array的原型方法

3 方法引用

方法引用本身是语法糖,它将箭头函数表示的方法引用,改用"::"替代.
注意,这里说的是方法引用,而不是方法本身,即将

stream.map(str->str.toUpperCase)

stream.map(String::toUpperCase)

来替换.

转载于:https://my.oschina.net/yangyishe/blog/3067140

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值