java8学习笔记

1. Lambda 表达式

Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码

像数据一样进行传递),本质上还是一个匿名内部类。

例 :Runnable r1=()->System.out.println("hehe");

2.函数式接口

只包含一个抽象方法的接口。

Java 内置四大核心函数式接口

Consumer<T>  消费型接口

Supplier<T>  供给型接口

Function<T, R>  函数型接口

Predicate<T>  断定型接口

3. 方法引用

当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用

 对象::实例方法

 类::静态方法

 类::实例方法

例:BinaryOperator bo1=(p1,p2)-> Math.pow(p1,p2);

       BinaryOperator bo2=Math::pow;

4.stream Api

 1.定义

  数据渠道,用于操作数据源(集合、数组等)所生成的元素序列

   集合存取数据,流计算数据

2.Stream 的操作三个步骤

创建 Stream

        1.Collection 接口方法  stream()  parallelStream()

        2.Arrays. stream(T[] array)

        3.Stream.of(T... values)   Stream.iterate()  Stream.generate(),

示例:


创建stream

 中间操作

      1). 筛选与切片

                filter(Predicate p)   过滤

                 distinct()      去重(根据equals y与hashCode方法去重)

                limit(long maxSize)   截断

                skip(long n)   跳过

                示例:


实体类
操作
输出

   2).映射

 map(Function f) :接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。

flatMap(Function f)  :接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流(扁平化流

sorted(Comparator comp) :排序


例:

中间操作

总结:中间操作类似于sql中对数据进行筛选 ,排序,过滤,去重等,同时多了一个映射转换的操作。

3).终结操作

查找与匹配

     allMatch(Predicate p) 检查是否匹配所有元素

    anyMatch(Predicate p)检查是否至少匹配一个元素

    noneMatch(Predicate p)检查是否没有匹配所有元素

    findFirst()返回第一个元素

    findAny()返回当前流中的任意元素

归约

    reduce(BinaryOperator b) 

     用途:元素求和 与最大最小值等

例:


收集 统计

    collect(Collector c)

1.收集到集合中


收集1

2.规约收集


收集2

3.分组

groupingBy的第二个收集器可以是任何类型,可以其他收集器结合使用

4.分区

分区看作分组一种特殊情况

5.直接收集

收集3

5.并行流

    1.并行流就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流

    2.默认的线程数量就是你的处理器数量,可通过系统参数修改

     System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism","12");

   3.可以声明性地通过 parallel() 与sequential() 在并行流与顺序流之间进行切换。

    4. Fork/Join运行流程


运行流程

     5.工作窃取

        采用 “工作窃取”模式(work-stealing):

        当执行新的任务时它可以将其拆分分成更小的任务执行,并将小任务加到线程队列中,然后再从一个随机线程的队列中偷一个并把它放在自己的队列中。相对于一般的线程池实现,fork/join框架的优势体现在对其中包含的任务的处理方式上.在一般的线程池中,如果一个线程正在执行的任务由于某些原因无法继续运行,那么该线程会处于等待状态.而在fork/join框架实现中,如果 某个子问题由于等待另外一个子问题的完成而无法继续运行.那么处理该子问题的线程会主动寻找其他尚未运行的子问题来执行.这种方式减少了线程 的等待时间,提高了性能.

6.optional

7.新时间日期 API

  1,基本api

LocalDate  日期  LocalDate.of(2014, 3, 18)

LocalTime 时间    LocalTime.of(13, 45, 20)

LocalDateTime=LocalDate+LocalTime 日期+时间   LocalDateTime.of(2014, Month.MARCH, 18, 13, 45, 20);

Instant 时间戳  (toEpochMilli() 与System.currentTimeMillis() 值相同)

Duration 时间差  Duration d1 = Duration.between(time1, time2);

Period 日期差  Period.between(LocalDate.of(2014, 3, 8), LocalDate.of(2014, 3, 18));

获取信息  get(ChronoField)  

修改时间with() plus minus 方法 等   

2.时间调整

使用with(TemporalAdjuster)重载方法;

TTemporalAdjusters : 该类通过静态方法提供了大量的常用 TemporalAdjuster 的实现

  例:LocalDateTime.now().with(TemporalAdjusters.previous(DayOfWeek.MONDAY));

3.格式化

DateTimeFormatter 

format()格式化  parse()解析

DateTimeFormatter .ofPattern() 自定义格式

例:String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

4.时区

ZoneId对象与LocalDate、LocalDateTime或者是Instant对象整合起来,构造为一个ZonedDateTime实例。

5.与原Date转换

先转换为instant ,再通过时区进行转换

date  <-   instant +zoneid   ->   localdatetime( localdate localtime 先转localdatetime)

LocalDateTime 转 instant : LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant();

Date转instant  :new Date().toInstant();

instant转date:Date.from(Instant instant)

instant转LocalDateTime:LocalDateTime.ofInstant(instant, zone)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容