首页 > 编程语言 >Java8 新特性

Java8 新特性

时间:2022-11-16 16:47:58浏览次数:67  
标签:返回 Stream 接口 参数 特性 new Java8 Lambda

Java8新特性

 

Java8 新特性之 Lambda 和 Stream

(一) Lambda#

1. what?#

Lambda是 java8 的一个新特性,可以大幅度减少代码量;

关注于"做什么",而不是"怎么做",可以通过匿名内部类理解;

虽然减少了代码量,但是可读性差;

2. why?#

简单快速的满足一些要求,如获取并行流对象

3. how?#

表达式: ( ) -> { }

左侧代表 Lambda 所需的所有参数,右边是 Lambda 要执行的功能(方法体)

注:

  1. ( ) 内参数只有1个时,可以去掉括号;

  2. { }内方法体只有1个时,可以去掉花括号

  3. ( )不需要写参数类型

  4. 右侧如果只有一个表达式返回值,return 可以省略

(1) 4个常用的函数式接口#

所谓函数式接口,就是 该接口有且仅有1个抽象方法,通常会贴有标签@FunctionalInterface

重点区分:4个常用的函数式接口她们的特点和特征是什么

  参数类型 返回类型 特点
Consumer 消费型接口 T void 对类型T的对象进行操作
方法 : void accept(T t)
Function 函数型接口 T R 对类型T的对象进行操作 , 返回类型是R的对象
Supplier 供给型接口   T 返回类型为T的对象
方法 : T get( ) ;
Predicate 断言型接口 T boolean 判断对象T是否满足条件 , 返回boolean值
方法: boolean test ( T t ) ;

(2) 方法引用的语法#

类名::静态方法名

对象::实例方法名

类名::实例方法名

类名::new (构造器引用 )

类型[]::new (数组引用)

(二) Stream#

1. what?#

Stream是对数据进行操作的一个工具,封装了一些好用的方法

Stream流的特点:属于管道流,只能被使用一次。第一个Stream流调用完毕方法,数据就会流到下一个Stream上(可以看成是流水线操作),所以第一个Stream流不能再调用方法。

2. why?#

传统集合操作数据流程复杂,Stream提供的API大大缩减了代码量

3. how?#

  1. 创建一个Steam流对象
  2. 根据需求调用方法
  3. 若要输出,forEach( ),用了forEach( )就不能再进行链式操作了,Stream流已经关闭了。

(1) 创建Stream对象的5种方式#

1> 调用 stream();//并发
   调用 parallelStream();//并行

2> Arrays.stream(); // 可以传入一个数组

3> Stream.of(); // 可以传入任意类型

4> Stream.iterate(); //无限流 第一个参数可以指定开始的值,第二个参数填写规则

5> Stream.generate(new Supplier接口) //无限流 ,可用于产生随机数等 
    

(2) 常用API#

filter()   (传入判断规则过滤筛选出)     
     
distinct()  去重,不需要传入参数
    
limit()   (无限流可以限制其输出多少个)
    
skip()    (传入需要跳过的个数)

map()      对传入的集合进行操作,然后返回;操作前后元素数量相同
flatmap()  对传入的两个集合进行整合,返回一个新的Stream流

排序:
sort()    不传参自然排序,传参可自定义排序规则

匹配:
allMatch(); 全部元素都匹配条件,返回ture
anyMatch(); 任意一个元素匹配
noneMatch()  全部元素都不满足条件,返回true
findFirst() 返回第一个元素(Optional类型) 
findAny() 返回任意一个元素,常用于并行流ParallelStream

统计:
count() 统计个数
max() 
min()

汇总
reduce(第一个参数是x,第二个参数是x和y的操作,如x+y)  , 返回一个值

collect(Collectors. )可以生成一个集合,如map set等等
    
分组分区
collect(Collectors.groupingBy(new 函数型接口)) 根据某个参数分组,可以分多个组
collect(Collectors.partitioningBy(new 断言型接口)) 根据某个条件分区,true区和false区

标签:返回,Stream,接口,参数,特性,new,Java8,Lambda
From: https://www.cnblogs.com/LLW521/p/16896428.html

相关文章

  • FastJson循环引用特性
    FastJson在序列化集合时,若集合循环引用特性packagecom.yang;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.TypeReference;importcom.alibaba.f......
  • C++11新特性系列
    C++11/14特性系列1.variadictemplates(可变参数模板)//需要处理最后一个无参的情况voidprint(){}template<typename...Types>voidprint(constTypes&.........
  • C++——各版本新特性
    参考:https://www.cnblogs.com/yrm1160029237/p/14246166.htmlC++11auto关键字decltype关键字nullptr字面值constexpr关键字for(declaration:expression)Lambda表......
  • C++面经 : C++ 11 新特性(闭包与匿名函数) ----C++ Closure & C++ anonymous functions
    关于C++Closure闭包和C++anonymousfunctions匿名函数什么是闭包?在C++中,闭包是一个能够捕获作用域变量的未命名函数对象,它包含了需要使用的“上下文”(函数......
  • 随参信道的传输特性
    1.随参信道的特性    2.多径传播的影响         ......
  • 恒参信道的传输特性
    1.理想恒参信道的特性      2.实际恒参信道的特性       ......
  • 小新Java8-【final、权限、内部类、引用类型】
    一、final关键字1.概述final:不可改变。可以用于修饰类、方法和变量。类:被修饰的类,不能被继承。方法:被修饰的方法,不能被重写。变量:被修饰的变量,不能被重新赋值。2.......
  • 支持多脚本语言的UDF等六大特性,TDengine 3.0计算引擎详解
    小 T 导读:在8月13日的TDengine开发者大会上,TDengine计算引擎架构师廖浩均带来题为《TDengine3.0——全新计算查询引擎的设计》的主题演讲,详细阐述了TDengine3.0......
  • es6有哪些新特性?
    1.let和ocnst,可以定义块级作用域 2.新增了箭头函数,箭头函数简化了函数定义的定义 3.新增了promise解决回调地狱问题ps:回调地狱是我们异步请求服务器数据时......
  • PHP 7.3 比 PHP 7.0 快 22%,即将进入特性冻结阶段
    随着上周PHP7.3Alpha3的发布,意味着PHP7.3即将进入特性冻结阶段,不再有新的功能添加,后续的Beta和RC版本将主要进行修复,直到11月29日发布正式版本。从目前的......