Java8新特性学习

Wesley13
• 阅读 583

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基本都能做到):

streamType

java8

js

作用

intermediate

map

map

将stream中的每一个元素,映射为另外一个元素

intermediate

flatMap

flat,flatMap

将stream中的层次结构扁平化

intermediate

filter

filter

对每一个元素进行测试,通过测试的元素留下来

terminal

forEach

forEach

对每一个元素执行操作

intermediate

peek

对每一个元素执行操作

terminal

findFirst

find

查找符合条件的第一个元素

terminal

reduce

reduce

依序将元素组合起来得到一个新的值

intermediate

limit

slice

返回前n个元素

intermediate

skip

slice

跳过前n个元素(返回剩下的元素)

intermediate

sorted

sort

对元素进行排序

terminal

min

最小值

terminal

max

最大值

intermediate

distinct

去除重复值

terminal

allMatch

every

全部元素符合

terminal

anyMatch

some

任一元素符合

terminal

noneMatch

没有元素符合

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

参考链接:

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

3 方法引用

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

stream.map(str->str.toUpperCase)

stream.map(String::toUpperCase)

来替换.

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
2年前
Java8 默认方法 default method
Java8引入了新的语言特性——默认方法(DefaultMethods)。Defaultmethodsenablenewfunctionalitytobeaddedtotheinterfacesoflibrariesandensurebinarycompatibilitywithcodewritte
Wesley13 Wesley13
2年前
Java8特性
Java8又称jdk1.8。主要新特性:Lambda表达式 −Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。方法引用 −方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
Wesley13 Wesley13
2年前
Java8函数式编程(A)
将行为作为数据传递函数编程的最直接的表现,莫过于将函数作为数据自由传递,结合泛型推导能力,使代码表达能力获得飞一般的提升。Java8怎么支持函数式编程?主要有三个核心概念:函数接口(Function)流(Stream)聚合器(Collector)函数接口关于函数接口,两件事:函数接口是行为
Wesley13 Wesley13
2年前
Java 8中你可能没听过的10个新特性
lambda表达式,lambda表达式,还是lambda表达式。一提到Java8就只能听到这个,但这不过是其中的一个新功能而已,Java8还有许多新的特性——有一些功能强大的新类或者新的用法,还有一些功能则是早就应该加到Java里了。这里我准备介绍它的10个我个人认为非常值得了解的新特性。总会有一款适合你的,开始来看下吧。default方法
Wesley13 Wesley13
2年前
Java8 新特性
Java8新特性一、Java8新特性简介1\.简介Java8(又称为jdk1.8)是Java语言开发的一个主要版本。Java8是orecle公司于2014年3月发布,可以看成是自Java5以来最具革命性的版本。Java8为Java语言、编译器、类库、开发工具与
Wesley13 Wesley13
2年前
Java8 Lambda表达式详解手册及实例
先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号“程序新视界”,好好系列的学习一下Java8的新特性。Lambda表达式已经在新框架中普通使用了,如果你对Lambda还一无所知,真得认真学习一下本篇文章了。现在进入正题Java8的Lambda,首先看一下发音
Wesley13 Wesley13
2年前
Java8—一万字的Lambda表达式的详细介绍与应用案例
  基于Java8详细介绍了lambda表达式的语法与使用,以及方法引用、函数式接口、lambda复合等Java8的新特性!文章目录1Lambda的概述2函数式接口2.1Consumer消费型接口2.2Supplier供给型接口2.3Function<T,R函数型接口
Wesley13 Wesley13
2年前
Java 8 创建 Stream 的 10 种方式,我保证你受益无穷!
之前栈长分享过Java8一系列新特性的文章,其中重点介绍了Stream.!(http://img.javastack.cn/20190613135450.png)!(http://img.javastack.cn/20190613135537.png)获取上面这份Java8~12系列新特性干货文章,请在微信搜索关注微信公众号:
Wesley13 Wesley13
2年前
Java笔记——Java8特性之Lambda、方法引用和Streams
转自: https://www.cnblogs.com/Fndroid/p/6087380.htmlJava8已经推出了好一段时间了,而掌握Java8的新特性也是必要的,如果要进行Spring开发,那么可以发现Spring的官网已经全部使用Java8来编写示例代码了,所以,不学就看不懂。这里涉及三个重要特性:Lambda方法引用
Wesley13 Wesley13
2年前
Java8 新特性 函数式接口
什么是函数式接口  函数式接口是Java8引用的一个新特性,是一种特殊的接口:SAM类型的接口(SingleAbstractMethod)。但是它还是一个接口,只是有些特殊罢了。  函数式接口的出现主要是为了配合Java8的另一个新特性Lamdba表达式来使用。接口中只有一个抽象方法接口