• Home
  • 归档
文章检索 作品与友邻 关于我
暴君乔博客
Home 归档

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从入门到优化手册
© 2026 tyrantqiao 本站总访问量次 本站访客数人次 载入天数...载入时分秒...
  • 文章检索
  • 作品与友邻
  • 关于我

展开标签

  • 随笔
  • 旅行
  • Java
  • 面经
  • 源码
  • 架构
  • Hadoop
  • 计算机网络
  • 技术
  • IDEA
  • maven
  • JDK
  • Linux
  • MySQL
  • 性能
  • 数据库
  • Redis
  • MQ
  • Spring
  • SquirrelFin
  • 记账
  • Android
  • 个人财务
  • TIDB
  • unity
  • chatgpt
  • 前端
  • Vue
  • Git
  • shadowsocks
  • Hexo
  • 问题排查
  • 业务
  • JVM
  • 算法
  • nginx
  • ssh
  • Python
  • 爬虫
  • test
  • vim
  • 影视剧
  • 中间件
  • 事务
  • 表达
  • 运动
  • mybatis
  • 域名
  • AI
  • 产品
  • 家装
  • 土巴兔
  • github
  • 软件
  • 个人项目
  • Leaves
  • 幽默
  • 穿搭
  • 画画
  • 缓存
  • 摄影
  • 设计模式
  • c
  • 课程设计
  • 调酒
  • 数学

Collection

作品与友邻

我做的小工具、朋友的站点和一些长期值得回访的灵感来源。

  • 土 土巴兔 AI 导购交互演示 可点击体验用户导购、平台运营、装修公司、材料商及 AI 话术知识库的多端增长流程。 /demos/tubatu-ai-guide/
  • L Leaves 行程记录 我做的行程记录页面小工具,用来沉淀旅行路线、日程安排和途中的灵感。 https://leaves.tyrantqiao.com/
  • 本 本网站主题yilia设计者的主页 http://litten.me/
tyrantqiao的头像

tyrantqiao

github rss qq mail facebook linkedin

About

关于我

代码、海浪和持续折腾,都是生活的一部分。

<div class="aboutme-card"> <p class="aboutme-eyebrow">tyrantqiao</p> <h3>Java 全栈开发</h3> <p>常年和 Java、后端服务、前端工程、数据与部署打交道,喜欢把复杂问题拆开、写清楚,也把踩坑过程整理成文章留给后来的人。</p> <div class="aboutme-tags"> <span>Java</span> <span>Full Stack</span> <span>Backend</span> <span>Frontend</span> <span>Extreme Sports</span> </div> <p>工作之外偏爱冲浪等极限运动,享受在浪上找平衡,也享受在代码里找边界。</p> <div class="aboutme-contact"> <a href="mailto:[email protected]">Gmail</a> <a href="mailto:[email protected]">QQ Mail</a> </div> </div>