java8學(xué)習(xí)筆記

1.?Lambda 表達(dá)式

Lambda 是一個(gè)匿名函數(shù),我們可以把 Lambda表達(dá)式理解為是一段可以傳遞的代碼(將代碼

像數(shù)據(jù)一樣進(jìn)行傳遞),本質(zhì)上還是一個(gè)匿名內(nèi)部類。

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

2.函數(shù)式接口

只包含一個(gè)抽象方法的接口。

Java 內(nèi)置四大核心函數(shù)式接口

Consumer<T>??消費(fèi)型接口

Supplier<T>??供給型接口

Function<T, R>??函數(shù)型接口

Predicate<T>??斷定型接口

3.?方法引用

當(dāng)要傳遞給Lambda體的操作,已經(jīng)有實(shí)現(xiàn)的方法了,可以使用方法引用

? 對(duì)象::實(shí)例方法

? 類::靜態(tài)方法

? 類::實(shí)例方法

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

? ? ? ?BinaryOperator bo2=Math::pow;

4.stream Api

?1.定義

? 數(shù)據(jù)渠道,用于操作數(shù)據(jù)源(集合、數(shù)組等)所生成的元素序列

? ?集合存取數(shù)據(jù),流計(jì)算數(shù)據(jù)

2.Stream 的操作三個(gè)步驟

創(chuàng)建 Stream

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

? ? ? ? 2.Arrays.?stream(T[] array)

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

示例:


創(chuàng)建stream

?中間操作

? ? ? 1).?篩選與切片

? ? ? ? ? ? ? ? filter(Predicate p)? ?過濾

? ? ? ? ? ? ? ? ?distinct()? ? ? 去重(根據(jù)equals y與hashCode方法去重)

? ? ? ? ? ? ? ? limit(long maxSize)? ?截?cái)?/p>

? ? ? ? ? ? ? ? skip(long n)? ?跳過

? ? ? ? ? ? ? ? 示例:


實(shí)體類
操作
輸出

? ?2).映射

?map(Function f) :接收一個(gè)函數(shù)作為參數(shù),該函數(shù)會(huì)被應(yīng)用到每個(gè)元素上,并將其映射成一個(gè)新的元素。

flatMap(Function f)? :接收一個(gè)函數(shù)作為參數(shù),將流中的每個(gè)值都換成另一個(gè)流,然后把所有流連接成一個(gè)流(扁平化流

sorted(Comparator comp) :排序


例:

中間操作

總結(jié):中間操作類似于sql中對(duì)數(shù)據(jù)進(jìn)行篩選 ,排序,過濾,去重等,同時(shí)多了一個(gè)映射轉(zhuǎn)換的操作。

3).終結(jié)操作

查找與匹配

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

????anyMatch(Predicate p)檢查是否至少匹配一個(gè)元素

????noneMatch(Predicate p)檢查是否沒有匹配所有元素

????findFirst()返回第一個(gè)元素

????findAny()返回當(dāng)前流中的任意元素

歸約

????reduce(BinaryOperator b)?

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

例:


收集 統(tǒng)計(jì)

????collect(Collector c)

1.收集到集合中


收集1

2.規(guī)約收集


收集2

3.分組

groupingBy的第二個(gè)收集器可以是任何類型,可以其他收集器結(jié)合使用

4.分區(qū)

分區(qū)看作分組一種特殊情況

5.直接收集

收集3

5.并行流

????1.并行流就是把一個(gè)內(nèi)容分成多個(gè)數(shù)據(jù)塊,并用不同的線程分別處理每個(gè)數(shù)據(jù)塊的流

? ? 2.默認(rèn)的線程數(shù)量就是你的處理器數(shù)量,可通過系統(tǒng)參數(shù)修改

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

? ?3.可以聲明性地通過 parallel() 與sequential() 在并行流與順序流之間進(jìn)行切換。

? ? 4. Fork/Join運(yùn)行流程


運(yùn)行流程

? ? ?5.工作竊取

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

????????當(dāng)執(zhí)行新的任務(wù)時(shí)它可以將其拆分分成更小的任務(wù)執(zhí)行,并將小任務(wù)加到線程隊(duì)列中,然后再從一個(gè)隨機(jī)線程的隊(duì)列中偷一個(gè)并把它放在自己的隊(duì)列中。相對(duì)于一般的線程池實(shí)現(xiàn),fork/join框架的優(yōu)勢體現(xiàn)在對(duì)其中包含的任務(wù)的處理方式上.在一般的線程池中,如果一個(gè)線程正在執(zhí)行的任務(wù)由于某些原因無法繼續(xù)運(yùn)行,那么該線程會(huì)處于等待狀態(tài).而在fork/join框架實(shí)現(xiàn)中,如果 某個(gè)子問題由于等待另外一個(gè)子問題的完成而無法繼續(xù)運(yùn)行.那么處理該子問題的線程會(huì)主動(dòng)尋找其他尚未運(yùn)行的子問題來執(zhí)行.這種方式減少了線程 的等待時(shí)間,提高了性能.

6.optional

7.新時(shí)間日期 API

? 1,基本api

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

LocalTime 時(shí)間? ? LocalTime.of(13, 45, 20)

LocalDateTime=LocalDate+LocalTime 日期+時(shí)間? ?LocalDateTime.of(2014, Month.MARCH, 18, 13, 45, 20);

Instant 時(shí)間戳? (toEpochMilli() 與System.currentTimeMillis() 值相同)

Duration 時(shí)間差??Duration d1 = Duration.between(time1, time2);

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

獲取信息??get(ChronoField)??

修改時(shí)間with()?plus?minus?方法 等? ?

2.時(shí)間調(diào)整

使用with(TemporalAdjuster)重載方法;

TTemporalAdjusters : 該類通過靜態(tài)方法提供了大量的常用 TemporalAdjuster 的實(shí)現(xiàn)

? 例: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.時(shí)區(qū)

ZoneId對(duì)象與LocalDate、LocalDateTime或者是Instant對(duì)象整合起來,構(gòu)造為一個(gè)ZonedDateTime實(shí)例。

5.與原Date轉(zhuǎn)換

先轉(zhuǎn)換為instant ,再通過時(shí)區(qū)進(jìn)行轉(zhuǎn)換

date? <-? ?instant +zoneid? ?->? ?localdatetime(?localdate localtime 先轉(zhuǎn)localdatetime)

LocalDateTime 轉(zhuǎn)?instant :?LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant();

Date轉(zhuǎn)instant? :new Date().toInstant();

instant轉(zhuǎn)date:Date.from(Instant instant)

instant轉(zhuǎn)LocalDateTime:LocalDateTime.ofInstant(instant, zone)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容