• Home
  • Archives
  • 随笔
所有文章 友链 关于我

  • Home
  • Archives
  • 随笔

JDK8学习,特性以及源码

发布于: 2018-08-05
更新于: 2023-07-09

java8 的一些新特性:

  1. 流处理(stream API)
  2. 行为参数化 ::
  3. Lambda
  4. 方法引用(predicate–谓词)
  5. 默认方法(default)
  6. Optional<T>容器对象 可包含空值

Stream API+lambda+行为参数化

things=filterThings(things,(Thing a)->a.getColor().equals("red"));
List<Thing> blueThings=things.stream().filter((Thing t)->t.getColor().equals("blue")).collect(Collectors.toList());
List<Thing> parallelThings=things.parallelStream().filter((Thing t)->t.getSize()<5).collect(Collectors.toList());

行为参数化

  1. predicate 流程
public static boolean testSizeBig(Thing thing){
        return thing.getSize()>5;
}
filter(xxx,class::testSizeBig)

default

  • 扩写接口且实体类不用显式实现
    (这样就可以在函数接口内扩写方法,而不破坏函数接口的唯一性–只能有一个抽象方法

Lambda

  • 本质是对应接口的签名
  • 常用函数接口

    Predicate – boolean test

Consumer – void accept(T t)

Function<T,R> – R apply(T,t)

由于接口泛型缘故,使得必须传入引用类型(Reference Type)使得基本类型要经过 boxing,开销大。
解决:调用 IntFunction 或者 Double 之类的避免装箱拆箱过程。

此外 Lambda 不直接支持异常:

  • try-catch 解决

  • 接口处 throw

  • 关于签名认证,若接口为 void,Lambda 为语句即可满足,即便返回的是其它类型

  • 作用域:实例、static 变量(但局部变量必须为 final)as: 使局部唯一,避免并行错误

  • 操作符: .and .or .andThen(g) .compose(xx)先执行 xx

方法引用
()->new XXX() == XXX::new 调用构造器。(无法访问内部类的构造器maybe)

多参数接口

XFunction<T,U,V,R>{
        R apply(T t,U u, R r);
}

流
comparing(xx::xx)
.thenComparing()

  • Stream
    .fliter
    .skip
    .collet(toList())
    .max
    .min
    .map(method()) 让每个元素执行函数
    .distinct() 使独一无二
    .anyMatch 至少 1
    .noneMatch
    .flatMap(Arrays::Stream) Stream 使流数组汇成一个流
    .ifPresent 若有值则 true 或者执行语句
    .reduce(Initial, BinaryOperator) 初始值若不加则对象应为 Optional,操作符即可用 Lambda
    .sorted(comparing())
    .mapToInt() 返回 IntStream
    .boxed() 装箱
    .mapToObj 对象流
    .iterate() 遍历
    .groupingBy() 分组

  • 数据类型
    同样避免装箱拆箱操作,有 IntStream 等选择

  • 生成List

List<Integer> list=Stream.iterate(1,i->i+1)
                        .limit(10)
                        .collect(Collectors.toList());
  • reduce
    对函数进行操作,返回 Optional的结果
stream.reduce(Integer::sum);
这里应注意,当你想在static void main()中使用lambda时,使用的函数必须是static注释的,所以类似一些String::method是不能使用的.
  • sort
    生成 List 后,直接.sort();

  • sort - [x] Function - [x] Function,Comparator
    若是选择前者,则以默认的排序方法进行

  • Function<T,R> – R apply(T);
    核心是接受类型为 T 的 data,进行操作后返回类型为 R 的 result;

  • Comparator – int compare(T o1,T 02);

    接受类型为 T 的 data,进行 compare 操作,返回正数,负数,0 对应><=

可用 a.compareTo(b)

((Comparable)a).compareTo(b)

Comparator.naturalOrder()

String::compareTo

List<Integer> result= Arrays.asList(1,2,5,3,6,2,0,35,34,4,6);
        result.sort(Comparator.comparing(t -> t, (a, b) -> ((Comparable)a).compareTo(b)));
        System.out.println(result);
JDK8学习,特性以及源码
/archives/58254cc4/
作者
tyrantqiao
发布于
2018-08-05
更新于
2023-07-09
许可协议
CC BY-NC-SA 4.0
赏

蟹蟹大佬的打赏,大家一起进步

支付宝
微信
  • java

扫一扫,分享到微信

微信分享二维码
IDEA技巧【快捷键、插件等】
hexo从入门到优化手册
© 2024 tyrantqiao 本站总访问量次 本站访客数人次 载入天数...载入时分秒...
  • 所有文章
  • 友链
  • 关于我

tag:

  • 复盘
  • 我
  • 规划
  • java
  • 面试
  • 源码
  • 架构
  • Hadoop
  • HTTP
  • TCP
  • 学习笔记
  • IDEA
  • maven
  • idea
  • Java
  • jdk
  • 面经
  • linux
  • 爱情
  • mysql
  • 性能
  • sql
  • Mysql
  • JAVA
  • 技术
  • Redis
  • MQ
  • Spring
  • 数据库
  • TIDB
  • spring
  • unity
  • chatgpt
  • 经验分享
  • 前端
  • redis
  • vue
  • git
  • shadowsocks
  • hexo
  • blog
  • bug
  • 开发
  • 业务
  • jvm
  • 算法
  • MySQL
  • nginx
  • Linux
  • mq
  • db
  • springCloud
  • ssh
  • python
  • 爬虫
  • test
  • vim
  • 影视剧
  • 中间件
  • 事务
  • 性格
  • 音乐
  • 程序员
  • 随笔
  • mybatis
  • 演讲
  • 域名
  • 猫咪
  • 她
  • github
  • 计划
  • 旅游
  • 软件
  • 心理
  • 情商
  • 幽默
  • 才艺
  • 穿搭
  • 编程
  • 排序
  • 查找
  • 缓存
  • 网络
  • 设计模式
  • c
  • 课程设计
  • centos
  • 数学
  • 本网站主题yilia设计者的主页
如果有问题或者想讨论的可以联系[email protected]或者[email protected]