Submit Search
Upload
On stream-lazy-computation
•
2 likes
•
1,771 views
Shinya Mochida
Follow
Streamで学ぶ遅延処理実装パターン
Read less
Read more
Technology
Report
Share
Report
Share
1 of 26
Download now
Download to read offline
Recommended
JavaのStreamで学ぶ遅延処理実装パターン
JavaのStreamで学ぶ遅延処理実装パターン
Shinya Mochida
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
JustSystems Corporation
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
JustSystems Corporation
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
Shuji Watanabe
最新のJava言語仕様で見るモジュールシステム #jjug
最新のJava言語仕様で見るモジュールシステム #jjug
JustSystems Corporation
2015/11/15 Javaでwebアプリケーション入門
2015/11/15 Javaでwebアプリケーション入門
Asami Abe
Pythonでwebdriver
Pythonでwebdriver
株式会社 システムヨシイ
Hello Java
Hello Java
Chihiro Ito
Recommended
JavaのStreamで学ぶ遅延処理実装パターン
JavaのStreamで学ぶ遅延処理実装パターン
Shinya Mochida
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
JustSystems Corporation
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
JustSystems Corporation
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
Shuji Watanabe
最新のJava言語仕様で見るモジュールシステム #jjug
最新のJava言語仕様で見るモジュールシステム #jjug
JustSystems Corporation
2015/11/15 Javaでwebアプリケーション入門
2015/11/15 Javaでwebアプリケーション入門
Asami Abe
Pythonでwebdriver
Pythonでwebdriver
株式会社 システムヨシイ
Hello Java
Hello Java
Chihiro Ito
JJUG CCC 2013 Springの懇親会LT
JJUG CCC 2013 Springの懇親会LT
irof N
Java SE 再入門
Java SE 再入門
minazou67
NDS36 Java7&Java8
NDS36 Java7&Java8
Yukiya Nakagawa
Javaにおけるネイティブコード連携の各種手法の紹介
Javaにおけるネイティブコード連携の各種手法の紹介
khisano
Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係
yy yank
使ってみようPTSV
使ってみようPTSV
株式会社 システムヨシイ
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション
yy yank
楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug
Yuji Kubota
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
irof N
Pythonのユニットテスト
Pythonのユニットテスト
株式会社 システムヨシイ
新入社員のための大規模ゲーム開発入門 サーバサイド編 2015
新入社員のための大規模ゲーム開発入門 サーバサイド編 2015
infinite_loop
Ipythonを使ってみよう
Ipythonを使ってみよう
株式会社 システムヨシイ
Java仮想マシンの実装技術
Java仮想マシンの実装技術
Kiyokuni Kawachiya
Java EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jp
Norito Agetsuma
Mackerel Day#2 チェック監視が救う!!エンジニア0カンパニー
Mackerel Day#2 チェック監視が救う!!エンジニア0カンパニー
Kiyotaka Kunihira
[Jjug]java small object programming
[Jjug]java small object programming
Yuichi Hasegawa
エンタープライズシステムにおけるテスト ~STE研究交流会 参加者の視点から ~
エンタープライズシステムにおけるテスト ~STE研究交流会 参加者の視点から ~
Kazuhiro Suzuki
第2回nseg slideshare
第2回nseg slideshare
ko ty
Java Flight Recorderの紹介 at Java Day Tokyo 2015
Java Flight Recorderの紹介 at Java Day Tokyo 2015
Chihiro Ito
Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~
Atsushi Harada
20150806_IntroJAZUG
20150806_IntroJAZUG
Saori Ando
More Related Content
What's hot
JJUG CCC 2013 Springの懇親会LT
JJUG CCC 2013 Springの懇親会LT
irof N
Java SE 再入門
Java SE 再入門
minazou67
NDS36 Java7&Java8
NDS36 Java7&Java8
Yukiya Nakagawa
Javaにおけるネイティブコード連携の各種手法の紹介
Javaにおけるネイティブコード連携の各種手法の紹介
khisano
Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係
yy yank
使ってみようPTSV
使ってみようPTSV
株式会社 システムヨシイ
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション
yy yank
楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug
Yuji Kubota
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
irof N
Pythonのユニットテスト
Pythonのユニットテスト
株式会社 システムヨシイ
新入社員のための大規模ゲーム開発入門 サーバサイド編 2015
新入社員のための大規模ゲーム開発入門 サーバサイド編 2015
infinite_loop
Ipythonを使ってみよう
Ipythonを使ってみよう
株式会社 システムヨシイ
Java仮想マシンの実装技術
Java仮想マシンの実装技術
Kiyokuni Kawachiya
Java EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jp
Norito Agetsuma
Mackerel Day#2 チェック監視が救う!!エンジニア0カンパニー
Mackerel Day#2 チェック監視が救う!!エンジニア0カンパニー
Kiyotaka Kunihira
[Jjug]java small object programming
[Jjug]java small object programming
Yuichi Hasegawa
エンタープライズシステムにおけるテスト ~STE研究交流会 参加者の視点から ~
エンタープライズシステムにおけるテスト ~STE研究交流会 参加者の視点から ~
Kazuhiro Suzuki
第2回nseg slideshare
第2回nseg slideshare
ko ty
Java Flight Recorderの紹介 at Java Day Tokyo 2015
Java Flight Recorderの紹介 at Java Day Tokyo 2015
Chihiro Ito
What's hot
(20)
JJUG CCC 2013 Springの懇親会LT
JJUG CCC 2013 Springの懇親会LT
Java SE 再入門
Java SE 再入門
NDS36 Java7&Java8
NDS36 Java7&Java8
Javaにおけるネイティブコード連携の各種手法の紹介
Javaにおけるネイティブコード連携の各種手法の紹介
Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係
使ってみようPTSV
使ってみようPTSV
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション
楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
Pythonのユニットテスト
Pythonのユニットテスト
新入社員のための大規模ゲーム開発入門 サーバサイド編 2015
新入社員のための大規模ゲーム開発入門 サーバサイド編 2015
Ipythonを使ってみよう
Ipythonを使ってみよう
Java仮想マシンの実装技術
Java仮想マシンの実装技術
Java EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jp
Mackerel Day#2 チェック監視が救う!!エンジニア0カンパニー
Mackerel Day#2 チェック監視が救う!!エンジニア0カンパニー
[Jjug]java small object programming
[Jjug]java small object programming
エンタープライズシステムにおけるテスト ~STE研究交流会 参加者の視点から ~
エンタープライズシステムにおけるテスト ~STE研究交流会 参加者の視点から ~
第2回nseg slideshare
第2回nseg slideshare
Java Flight Recorderの紹介 at Java Day Tokyo 2015
Java Flight Recorderの紹介 at Java Day Tokyo 2015
Similar to On stream-lazy-computation
Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~
Atsushi Harada
20150806_IntroJAZUG
20150806_IntroJAZUG
Saori Ando
2007 It合宿 発表資料/佐瀬 武志
2007 It合宿 発表資料/佐瀬 武志
kurubushionline
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
智治 長沢
Roo
Roo
terahide
たのしいアノテーション
たのしいアノテーション
Kazuhiro Sasao
師弟登壇2015 GMOペパボ @orzup
師弟登壇2015 GMOペパボ @orzup
Asami Nakano
Crashlyticsでクラッシュ撲滅作戦
Crashlyticsでクラッシュ撲滅作戦
Yoichiro Sakurai
Rnncamp01
Rnncamp01
Shin Asakawa
Rnncamp01
Rnncamp01
Shin Asakawa
サーバ擬人化ユーザ会キックオフ資料 Slideshare ver
サーバ擬人化ユーザ会キックオフ資料 Slideshare ver
Seiichiro Ishida
クラウド移住で地方に住むということ
クラウド移住で地方に住むということ
Takehito Tanabe
iPhoneアプリを Javaで書くよ?
iPhoneアプリを Javaで書くよ?
Toshio Ehara
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
Shuji Watanabe
Similar to On stream-lazy-computation
(14)
Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~
20150806_IntroJAZUG
20150806_IntroJAZUG
2007 It合宿 発表資料/佐瀬 武志
2007 It合宿 発表資料/佐瀬 武志
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
Roo
Roo
たのしいアノテーション
たのしいアノテーション
師弟登壇2015 GMOペパボ @orzup
師弟登壇2015 GMOペパボ @orzup
Crashlyticsでクラッシュ撲滅作戦
Crashlyticsでクラッシュ撲滅作戦
Rnncamp01
Rnncamp01
Rnncamp01
Rnncamp01
サーバ擬人化ユーザ会キックオフ資料 Slideshare ver
サーバ擬人化ユーザ会キックオフ資料 Slideshare ver
クラウド移住で地方に住むということ
クラウド移住で地方に住むということ
iPhoneアプリを Javaで書くよ?
iPhoneアプリを Javaで書くよ?
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
More from Shinya Mochida
サーバーサイド Kotlin のテストフレームワーク事情
サーバーサイド Kotlin のテストフレームワーク事情
Shinya Mochida
IntelliJ IDEA を完全にマスターする話
IntelliJ IDEA を完全にマスターする話
Shinya Mochida
クリーンアーキテクチャーを強制する方法を考えてみた(N番煎じ) #すえなみチャンス暑気払い
クリーンアーキテクチャーを強制する方法を考えてみた(N番煎じ) #すえなみチャンス暑気払い
Shinya Mochida
jjug-ccc 2019 Spring 発表資料 Collections Framework 入門 #jjug #jjug_ccc #ccc_c1
jjug-ccc 2019 Spring 発表資料 Collections Framework 入門 #jjug #jjug_ccc #ccc_c1
Shinya Mochida
swift-log について
swift-log について
Shinya Mochida
Vim 入門
Vim 入門
Shinya Mochida
Java プログラマーのための Swift 入門 #中央線Meetup
Java プログラマーのための Swift 入門 #中央線Meetup
Shinya Mochida
swift-nio のアーキテクチャーと RxHttpClient
swift-nio のアーキテクチャーと RxHttpClient
Shinya Mochida
JJUG CCC 2018 Spring - I-7 (俺が)はじめての Netty
JJUG CCC 2018 Spring - I-7 (俺が)はじめての Netty
Shinya Mochida
JJUG CCC 2018 Spring LT Spring Boot アプリケーションの起動を速くする 108 の Tips #jjug_ccc #jjug
JJUG CCC 2018 Spring LT Spring Boot アプリケーションの起動を速くする 108 の Tips #jjug_ccc #jjug
Shinya Mochida
Spring Boot アプリケーションの起動をほんの少し気持ちだけ速くしてみた
Spring Boot アプリケーションの起動をほんの少し気持ちだけ速くしてみた
Shinya Mochida
Javaモジュールシステム雑なまとめ
Javaモジュールシステム雑なまとめ
Shinya Mochida
Kotlin as an AltJS
Kotlin as an AltJS
Shinya Mochida
gradle2.4のルールベースモデルコンフィギュレーション
gradle2.4のルールベースモデルコンフィギュレーション
Shinya Mochida
Stream脳の作り方
Stream脳の作り方
Shinya Mochida
Java8のstreamをダラダラまとめてみる
Java8のstreamをダラダラまとめてみる
Shinya Mochida
ドラクエの金銭感覚
ドラクエの金銭感覚
Shinya Mochida
30億のデバイスで走るjavaを支えるjavaエコシステム
30億のデバイスで走るjavaを支えるjavaエコシステム
Shinya Mochida
Intelli j vs-eclipse-by-mike-neck #jbugj
Intelli j vs-eclipse-by-mike-neck #jbugj
Shinya Mochida
i-Phone unit-test
i-Phone unit-test
Shinya Mochida
More from Shinya Mochida
(20)
サーバーサイド Kotlin のテストフレームワーク事情
サーバーサイド Kotlin のテストフレームワーク事情
IntelliJ IDEA を完全にマスターする話
IntelliJ IDEA を完全にマスターする話
クリーンアーキテクチャーを強制する方法を考えてみた(N番煎じ) #すえなみチャンス暑気払い
クリーンアーキテクチャーを強制する方法を考えてみた(N番煎じ) #すえなみチャンス暑気払い
jjug-ccc 2019 Spring 発表資料 Collections Framework 入門 #jjug #jjug_ccc #ccc_c1
jjug-ccc 2019 Spring 発表資料 Collections Framework 入門 #jjug #jjug_ccc #ccc_c1
swift-log について
swift-log について
Vim 入門
Vim 入門
Java プログラマーのための Swift 入門 #中央線Meetup
Java プログラマーのための Swift 入門 #中央線Meetup
swift-nio のアーキテクチャーと RxHttpClient
swift-nio のアーキテクチャーと RxHttpClient
JJUG CCC 2018 Spring - I-7 (俺が)はじめての Netty
JJUG CCC 2018 Spring - I-7 (俺が)はじめての Netty
JJUG CCC 2018 Spring LT Spring Boot アプリケーションの起動を速くする 108 の Tips #jjug_ccc #jjug
JJUG CCC 2018 Spring LT Spring Boot アプリケーションの起動を速くする 108 の Tips #jjug_ccc #jjug
Spring Boot アプリケーションの起動をほんの少し気持ちだけ速くしてみた
Spring Boot アプリケーションの起動をほんの少し気持ちだけ速くしてみた
Javaモジュールシステム雑なまとめ
Javaモジュールシステム雑なまとめ
Kotlin as an AltJS
Kotlin as an AltJS
gradle2.4のルールベースモデルコンフィギュレーション
gradle2.4のルールベースモデルコンフィギュレーション
Stream脳の作り方
Stream脳の作り方
Java8のstreamをダラダラまとめてみる
Java8のstreamをダラダラまとめてみる
ドラクエの金銭感覚
ドラクエの金銭感覚
30億のデバイスで走るjavaを支えるjavaエコシステム
30億のデバイスで走るjavaを支えるjavaエコシステム
Intelli j vs-eclipse-by-mike-neck #jbugj
Intelli j vs-eclipse-by-mike-neck #jbugj
i-Phone unit-test
i-Phone unit-test
Recently uploaded
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
Recently uploaded
(12)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
On stream-lazy-computation
1.
JavaのStreamで学ぶ 遅延処理実装パターン @mike_neck
2.
ことわり この話を聞いてもアプリ作るのが爆速になるわけではありません この話を聞いてもアプリが簡単に作れるようになるわけでもあり ません この話を聞いても作るアプリケーションが安全になるわけでもあ りません 単なる知的好奇心を満たすかもしれませんが、儂が満足したいだ けです 遅延評価の話はしませんよ
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パイプラインがやってい ること AbstractPipeline<P_IN, P_OUT, Stream<P_OUT>>とは? Stream<P_OUT>の実装クラス これをさらに継承したクラスにReferencePipeline<P_IN, P_OUT>という抽象クラスがある(ほぼこれが実体) さらにStatelessOp<P_IN,
P_OUT>、StatefullOp<P_IN, P_OUT>という抽象クラスがある これらのパイプラインを構成するオブジェクトはデータ構造的に双方 向リンクドリストとなって前後のオブジェクトをたどることができる
10.
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の無名クラスの中に 埋め込む形で処理を保持する
11.
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));} }
12.
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の合成
13.
Sinkの合成 Sink<T>とは 個々の処理実行・制御を提供するConsumer<T>の拡 張インターフェース 初期状態 ! begin(long)
! 処理中 ! accept(T) ! 処理中 ! end() ! 初期状態 主な実装クラスはSink.ChainedReference<T>とい う抽象クラスで、リンクドリストの構造を持つ
14.
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
15.
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)へのリン クを持っている
16.
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 ・begin(long)は次の処理(Sink) のbegin(long)を呼び出す
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 ・accept(A)は処理を施した後に次の処 理(Sink)のaccept(B)を呼び出す
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 ・end()は次の処理(Sink) のend()を呼び出す
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.
ChainedReference <?, A> implements Sink<A> Sink<?> begin(long)
begin(long) accept(a) accept(?) end() end() a -> b
21.
ChainedReference <?, A> implements Sink<A> Sink<?> begin(long)
begin(long) accept(a) accept(?) end() end() a -> b 一番最後にあるSinkは何もの?
22.
終端操作と処理開始 一番最後にあるSinkは終端操作で生成される TerminalOp<T, R>にて生成される TerminalSink<T, R> シグニチャーはTerminalSink<T,
R> extends Sink<T>, Supplier<R>
23.
終端操作と処理開始 TerminalSink<T, R>を生成 パイプラインのリンクをたどりながら各パイプラインのSink opWrapSink(int, Sink)を呼び出してすべての処理を合成したSinkを 取得する 合成Sinkのbeginを呼び出す すべてのソース(Spliterator)にSinkを渡してacceptを呼び出させる ソースが全てを消費あるいは、必要な結果が得られたら合成Sinkのend を呼び出す
24.
終端操作と処理開始 TerminalSink<T, R>を生成 パイプラインのリンクをたどりながら各パイプラインのSink opWrapSink(int, Sink)を呼び出してすべての処理を合成したSinkを 取得する 合成Sinkのbeginを呼び出す すべてのソース(Spliterator)にSinkを渡してacceptを呼び出させる ソースが全てを消費あるいは、必要な結果が得られたら合成Sinkのend を呼び出す 終端操作呼び出しによって パイプラインをさかのぼって処理(Sink)を構築 SpliteratorにSinkを渡して処理を実行 処理終了を処理に通知
25.
まとめ ストリームパイプラインは双方向リンクドリストを 形成するのみで、処理の実行は行わない 処理をリンクドリストで構築することによって処理 順序を保証 終端操作でパイプラインを って処理を合成、ソー スを順次適用
26.
おわり (最後は雑にまとめた) で検索🔎mike-neck Stream
Download now