Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Shinya Mochida
PDF, PPTX
4,764 views
JavaのStreamで学ぶ遅延処理実装パターン
JavaのStreamで必要になった時だけに処理を行うようなプログラミングパターンを学ぶ
Technology
◦
Read more
10
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 36
2
/ 36
3
/ 36
4
/ 36
5
/ 36
6
/ 36
7
/ 36
8
/ 36
9
/ 36
10
/ 36
11
/ 36
12
/ 36
13
/ 36
14
/ 36
15
/ 36
16
/ 36
17
/ 36
18
/ 36
19
/ 36
20
/ 36
21
/ 36
22
/ 36
23
/ 36
24
/ 36
25
/ 36
26
/ 36
27
/ 36
28
/ 36
29
/ 36
30
/ 36
31
/ 36
32
/ 36
33
/ 36
34
/ 36
35
/ 36
36
/ 36
More Related Content
PDF
On stream-lazy-computation
by
Shinya Mochida
PDF
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
by
JustSystems Corporation
PDF
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
by
JustSystems Corporation
PPTX
Java EE パフォーマンスTips #glassfish_jp
by
Norito Agetsuma
PDF
2015/11/15 Javaでwebアプリケーション入門
by
Asami Abe
PDF
Hello Java
by
Chihiro Ito
PDF
Java SE 再入門
by
minazou67
PDF
Java仮想マシンの実装技術
by
Kiyokuni Kawachiya
On stream-lazy-computation
by
Shinya Mochida
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
by
JustSystems Corporation
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
by
JustSystems Corporation
Java EE パフォーマンスTips #glassfish_jp
by
Norito Agetsuma
2015/11/15 Javaでwebアプリケーション入門
by
Asami Abe
Hello Java
by
Chihiro Ito
Java SE 再入門
by
minazou67
Java仮想マシンの実装技術
by
Kiyokuni Kawachiya
What's hot
PDF
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
by
JustSystems Corporation
PPTX
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
by
Koichi Sakata
PPTX
おっさんES6/ES2015,React.jsを学ぶ
by
dcubeio
PDF
Jsug 20160422 slides
by
Yuichi Hasegawa
PDF
Spring3.1概要x di
by
Yuichi Hasegawa
PPTX
Javaにおけるネイティブコード連携の各種手法の紹介
by
khisano
PPTX
Java EE8 Report
by
Norito Agetsuma
PDF
Javaアプリケーションサーバ 構築・運用の勘所
by
Takahiro YAMADA
PDF
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
by
Norito Agetsuma
PDF
Java Flight Recorderの紹介 at Java Day Tokyo 2015
by
Chihiro Ito
PDF
最新のJava言語仕様で見るモジュールシステム #jjug
by
JustSystems Corporation
PDF
Spring3.1概要 AOP & MVC
by
Yuichi Hasegawa
PDF
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
by
Shuji Watanabe
PDF
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
by
irof N
PDF
Java8のstreamをダラダラまとめてみる
by
Shinya Mochida
PDF
あなたのメンタルモデルあってますか? 矢野
by
chome03
PDF
楽して JVM を学びたい #jjug
by
Yuji Kubota
PDF
Javaの登場と発展
by
Tamiya Onodera
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
by
JustSystems Corporation
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
by
Koichi Sakata
おっさんES6/ES2015,React.jsを学ぶ
by
dcubeio
Jsug 20160422 slides
by
Yuichi Hasegawa
Spring3.1概要x di
by
Yuichi Hasegawa
Javaにおけるネイティブコード連携の各種手法の紹介
by
khisano
Java EE8 Report
by
Norito Agetsuma
Javaアプリケーションサーバ 構築・運用の勘所
by
Takahiro YAMADA
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
by
Norito Agetsuma
Java Flight Recorderの紹介 at Java Day Tokyo 2015
by
Chihiro Ito
最新のJava言語仕様で見るモジュールシステム #jjug
by
JustSystems Corporation
Spring3.1概要 AOP & MVC
by
Yuichi Hasegawa
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
by
Shuji Watanabe
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
by
irof N
Java8のstreamをダラダラまとめてみる
by
Shinya Mochida
あなたのメンタルモデルあってますか? 矢野
by
chome03
楽して JVM を学びたい #jjug
by
Yuji Kubota
Javaの登場と発展
by
Tamiya Onodera
More from Shinya Mochida
PDF
JJUG CCC 2018 Spring - I-7 (俺が)はじめての Netty
by
Shinya Mochida
PDF
Spring Boot アプリケーションの起動をほんの少し気持ちだけ速くしてみた
by
Shinya Mochida
PDF
jjug-ccc 2019 Spring 発表資料 Collections Framework 入門 #jjug #jjug_ccc #ccc_c1
by
Shinya Mochida
PDF
Kotlin as an AltJS
by
Shinya Mochida
PDF
swift-log について
by
Shinya Mochida
PDF
サーバーサイド Kotlin のテストフレームワーク事情
by
Shinya Mochida
PDF
Stream脳の作り方
by
Shinya Mochida
PDF
30億のデバイスで走るjavaを支えるjavaエコシステム
by
Shinya Mochida
PDF
swift-nio のアーキテクチャーと RxHttpClient
by
Shinya Mochida
PDF
ドラクエの金銭感覚
by
Shinya Mochida
PDF
Vim 入門
by
Shinya Mochida
PDF
Javaモジュールシステム雑なまとめ
by
Shinya Mochida
KEY
i-Phone unit-test
by
Shinya Mochida
PDF
gradle2.4のルールベースモデルコンフィギュレーション
by
Shinya Mochida
PDF
On fx jsj unit - an idea to test javascript codes with junit and javafx
by
Shinya Mochida
PDF
JJUG CCC 2018 Spring LT Spring Boot アプリケーションの起動を速くする 108 の Tips #jjug_ccc #jjug
by
Shinya Mochida
PDF
Java プログラマーのための Swift 入門 #中央線Meetup
by
Shinya Mochida
PDF
クリーンアーキテクチャーを強制する方法を考えてみた(N番煎じ) #すえなみチャンス暑気払い
by
Shinya Mochida
PDF
Intelli j vs-eclipse-by-mike-neck #jbugj
by
Shinya Mochida
PDF
IntelliJ IDEA を完全にマスターする話
by
Shinya Mochida
JJUG CCC 2018 Spring - I-7 (俺が)はじめての Netty
by
Shinya Mochida
Spring Boot アプリケーションの起動をほんの少し気持ちだけ速くしてみた
by
Shinya Mochida
jjug-ccc 2019 Spring 発表資料 Collections Framework 入門 #jjug #jjug_ccc #ccc_c1
by
Shinya Mochida
Kotlin as an AltJS
by
Shinya Mochida
swift-log について
by
Shinya Mochida
サーバーサイド Kotlin のテストフレームワーク事情
by
Shinya Mochida
Stream脳の作り方
by
Shinya Mochida
30億のデバイスで走るjavaを支えるjavaエコシステム
by
Shinya Mochida
swift-nio のアーキテクチャーと RxHttpClient
by
Shinya Mochida
ドラクエの金銭感覚
by
Shinya Mochida
Vim 入門
by
Shinya Mochida
Javaモジュールシステム雑なまとめ
by
Shinya Mochida
i-Phone unit-test
by
Shinya Mochida
gradle2.4のルールベースモデルコンフィギュレーション
by
Shinya Mochida
On fx jsj unit - an idea to test javascript codes with junit and javafx
by
Shinya Mochida
JJUG CCC 2018 Spring LT Spring Boot アプリケーションの起動を速くする 108 の Tips #jjug_ccc #jjug
by
Shinya Mochida
Java プログラマーのための Swift 入門 #中央線Meetup
by
Shinya Mochida
クリーンアーキテクチャーを強制する方法を考えてみた(N番煎じ) #すえなみチャンス暑気払い
by
Shinya Mochida
Intelli j vs-eclipse-by-mike-neck #jbugj
by
Shinya Mochida
IntelliJ IDEA を完全にマスターする話
by
Shinya Mochida
Recently uploaded
PDF
エンジニアが選ぶべきAIエディタ & Antigravity 活用例@ウェビナー「触ってみてどうだった?Google Antigravity 既存IDEと...
by
NorihiroSunada
PDF
流行りに乗っかるClaris FileMaker 〜AI関連機能の紹介〜 by 合同会社イボルブ
by
Evolve LLC.
PPTX
楽々ナレッジベース「楽ナレ」3種比較 - Dify / AWS S3 Vector / Google File Search Tool
by
Kiyohide Yamaguchi
PDF
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #2
by
Tasuku Takahashi
PDF
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #1
by
Tasuku Takahashi
PDF
20251210_MultiDevinForEnterprise on Devin 1st Anniv Meetup
by
Masaki Yamakawa
エンジニアが選ぶべきAIエディタ & Antigravity 活用例@ウェビナー「触ってみてどうだった?Google Antigravity 既存IDEと...
by
NorihiroSunada
流行りに乗っかるClaris FileMaker 〜AI関連機能の紹介〜 by 合同会社イボルブ
by
Evolve LLC.
楽々ナレッジベース「楽ナレ」3種比較 - Dify / AWS S3 Vector / Google File Search Tool
by
Kiyohide Yamaguchi
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #2
by
Tasuku Takahashi
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #1
by
Tasuku Takahashi
20251210_MultiDevinForEnterprise on Devin 1st Anniv Meetup
by
Masaki Yamakawa
JavaのStreamで学ぶ遅延処理実装パターン
1.
JavaのStreamで学ぶ 遅延処理実装パターン @mike_neck
2.
ことわり 渋谷Javaの日程を間違えて、先週に資料上げてる から、内容を皆さんもうご存知なので、雑にやりま す
3.
概要 Streamの復習 Streamについての疑問 Streamパイプラインがやっていること Sinkの合成 終端操作と処理開始
4.
誰? 持田真哉(@mike_neck) たんなるJava、Groovy好きのおっさん 某IDEを売っている会社に入り浸って、クソコラを作ってる 2015年期待している陸上選手 青山聖佳(400m)、水口怜(走幅跳)、藤光謙司(200m)、 高瀬慧(100m)
5.
Streamの復習 for文を簡単に今っぽく書くやつ InputStreamと関係ない(全く関係ないわけで もないけど) ScalaのStreamとは違う 順次および並列での集約操作をサポートする要素の シーケンス(Javadocより)
6.
Streamの復習 repo.findAllUsers().stream() .filter(User::isMen) .filter(u -> u.getAge()
>= 27) .filter(u -> u.getAge() <= 35) .map(User::getHobbies) .flatMap(List::stream) .collect(groupingBy( Hobby::getGenre, counting())); ソース ストリームパイプライン 終端操作
7.
Streamの疑問 repo.findAllUsers().stream() .filter(User::isMen) .filter(u -> u.getAge()
>= 27) .filter(u -> u.getAge() <= 35) .map(User::getHobbies) .flatMap(List::stream) .collect(groupingBy( Hobby::getGenre, counting())); ・これらの処理はどのように保持 されるの? ・処理の順番はどのように保持さ れるの? ・終端操作呼び出しでどのように 処理が実行されるの?
8.
Streamパイプラインがやってい ること repo.findAllUsers().stream() .filter(User::isMen) .filter(u -> u.getAge()
>= 27) .filter(u -> u.getAge() <= 35) .map(User::getHobbies) .flatMap(List::stream) .collect(groupingBy( Hobby::getGenre, counting())); ・AbstractPipeline<P_IN, P_OUT, Stream<P_OUT>>のイ ンスタンスを生成して返す
9.
Streamパイプラインがやってい ること .filter(User::isMen) AbstractPipeline User:isMen
10.
Streamパイプラインがやってい ること .filter(User::isMen) .map(User::getHobbies) AbstractPipeline AbstractPipeline User:isMen User::getHobbies
11.
Streamパイプラインがやってい ること .filter(User::isMen) .map(User::getHobbies) .flatMap(List::stream) AbstractPipeline AbstractPipeline AbstractPipeline User:isMen User::getHobbies List::stream
12.
Streamパイプラインがやってい ること .filter(User::isMen) .map(User::getHobbies) .flatMap(List::stream) AbstractPipeline AbstractPipeline AbstractPipeline User:isMen User::getHobbies List::stream AbstractPipelineの逆順リストを作っている
13.
public final <R>
Stream map( Function<? super P_OUT, ? extends R> mapper) { return new StatelessOp<P_OUT, R>(this, …) { @Override Sink<P_OUT> opWrapSink(int flags, Sink<R> sink) { return new Sink.ChainedReference<P_OUT, R>(sink) { public void accept(P_OUT u) {downSink.accept(mapper.apply(u));} } Streamパイプラインがやってい ること 返されるStreamの無名クラスの中の opWrapSinkメソッドに埋め込まれる
14.
public final <R>
Stream map( Function<? super P_OUT, ? extends R> mapper) { return new StatelessOp<P_OUT, R>(this, …) { @Override Sink<P_OUT> opWrapSink(int flags, Sink<R> sink) { return new Sink.ChainedReference<P_OUT, R>(sink) { public void accept(P_OUT u) {downSink.accept(mapper.apply(u));} }
15.
public final <R>
Stream map( Function<? super P_OUT, ? extends R> mapper) { return new StatelessOp<P_OUT, R>(this, …) { @Override Sink<P_OUT> opWrapSink(int flags, Sink<R> sink) { return new Sink.ChainedReference<P_OUT, R>(sink) { public void accept(P_OUT u) {downSink.accept(mapper.apply(u));} } Sinkの合成
16.
Sinkの合成 Sink<T>とは 個々の処理実行・制御を提供するConsumer<T> の拡張インターフェース 初期状態 ! begin(long)
! 処理中 ! accept(T) ! 処理中 ! end() ! 初期状態 後方へのリンクを持つリスト
17.
Sinkの合成 ChainedReference <B, A> implements Sink<A> ChainedReference <C,
B> implements Sink<B> begin(long) begin(long) accept(a) accept(b) end() end() a -> b b -> c ・先に行われる処理(Sink)は次 に行われる処理(Sink)へのリン クを持っている
18.
Sinkの合成 ChainedReference <B, A> implements Sink<A> ChainedReference <C,
B> implements Sink<B> begin(long) begin(long) accept(a) accept(b) end() end() a -> b b -> c ・accept(A)は処理を施した後に次の処 理(Sink)のaccept(B)を呼び出す
19.
Sinkの合成 ChainedReference <B, A> implements Sink<A> ChainedReference <C,
B> implements Sink<B> begin(long) begin(long) accept(a) accept(b) end() end() a -> b b -> c Sinkがリンクドリストになっていること で処理順を保持している
20.
仕組みはわかったけど、 Sinkの合成はいつやるん?
21.
終端操作と処理開始 一番最後にあるSinkは終端操作TerminalOp<T, R>にて生成されるTerminalSink<T, R> 終端操作はAbstractPipelineの逆順リストをた どってSinkを合成していく
22.
終端操作と処理開始 AbstractPipeline AbstractPipeline AbstractPipeline Sink Sink Sink TerminalOp TerminalSink
23.
終端操作と処理開始 AbstractPipeline AbstractPipeline AbstractPipeline Sink Sink Sink TerminalOp TerminalSink
24.
終端操作と処理開始 AbstractPipeline AbstractPipeline AbstractPipeline Sink Sink Sink TerminalOp TerminalSink
25.
終端操作と処理開始 AbstractPipeline AbstractPipeline AbstractPipeline Sink Sink Sink TerminalOp TerminalSink
26.
終端操作と処理開始 AbstractPipeline AbstractPipeline AbstractPipeline Sink Sink Sink TerminalOp TerminalSink
27.
終端操作と処理開始 AbstractPipeline AbstractPipeline AbstractPipeline Sink Sink Sink TerminalOp TerminalSink Element Element Element Element
28.
終端操作と処理開始 AbstractPipeline AbstractPipeline AbstractPipeline Sink Sink Sink TerminalOp TerminalSink Element Element Element Element
29.
終端操作と処理開始 AbstractPipeline AbstractPipeline AbstractPipeline Sink Sink Sink TerminalOp TerminalSink Element Element Element Element
30.
まとめ ストリームパイプラインはStreamを実装した無名クラ スのインスタンスの逆順リストを作る StreamのopWrapSinkに各処理 (Function,Predicate)が埋め込まれる 処理順リストによって処理順序を保証 終端操作で逆順Streamインスタンスを って処理を合 成、ソースを順次適用
31.
以下、応用 • Java8の目玉機能といえば…
32.
Optionalですね
33.
Optionalの操作順序 • Javaらしく正格に実行されます
34.
今のStreamの実装パターンを もってLazyなOptional作れな いか?
35.
というわけで作っときました • 無駄にLazyなOptional • https://gist.github.com/mike-neck/ ebb6e1b170f8db8250f8
36.
おわり (最後は雑にまとめた) で検索🔎mike-neck Stream
Download