Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
StreamAPI, Lambdaと仲良くなる(202108社内勉強会)
Search
shimadamiyuki
August 19, 2021
0
110
StreamAPI, Lambdaと仲良くなる(202108社内勉強会)
月一で実施している社内勉強会の資料です(2021.08)
shimadamiyuki
August 19, 2021
Tweet
Share
More Decks by shimadamiyuki
See All by shimadamiyuki
20240912 JJUGナイトセミナー
mii1004
0
240
STORES決済の裏側のはなし(Code Polaris 色んなエンジニアLT大会)
mii1004
0
270
オブジェクト指向がわからない(202201社内勉強会)
mii1004
0
140
たのしい情報収集(202112社内勉強会)
mii1004
0
97
リファクタリング?(202111社内勉強会)
mii1004
0
86
OpenAPI Generator使ってみる(Java女子部ハロウィンLT)
mii1004
0
73
ビルドツールの話(202110社内勉強会)
mii1004
0
110
Hello Spring(202109社内勉強会)
mii1004
0
95
Javaはじめのいっぽ(202107社内勉強会)
mii1004
0
120
Featured
See All Featured
Designing for humans not robots
tammielis
253
25k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
47
2.8k
Scaling GitHub
holman
459
140k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
137
34k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.8k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Transcript
Stream API Lambdaと 仲良くなる 2021.8 チーム会
ラムダ︖Stream API︖ u Java8でStream APIとラムダ式という機能が追加されました︕ u なんで導⼊されたの︖ 背景にあったのはマルチコアCPUが興隆したこと。 マルチコアCPUで性能を引き出すために、 もっと簡単に細かい単位でパラレル処理ができるようにするべき︕という
流れがあったため。 →いまはパラレル処理のため、というより、便利だから使うケースが多そう。 u どういうものなの︖ Javaに関数型プログラミングの書き⽅を取り⼊れたもの。
関数型プログラミングって︖ 従来のJavaのパラダイム(考え⽅)は 命令型(⼿続き型)プログラミング u 関数型プログラミングとは︖ 関数(⼊⼒をもとに出⼒を返す処理)を組み合わせて実⾏する プログラミングの⽅法のこと。 u どう違うの︖ 命令型プログラミング︓How(個別の処理)を書く
関数型プログラミング︓What(処理の⽬的)を書く
関数型プログラミングのメリット u コードが少なくなる、直感的に読める u バグりにくい →⼊⼒と出⼒の組み合わせでコードを書く(状態を持つ変数がない)ので、 バグを⽣みにくい u 並列処理がしやすい
Streamって︖ u Streamって︖ もともとの意味は⽔の流れのこと。 プログラミング⾔語では⼀般的にデータの流れのことをStreamと呼ぶ (InputStreamとか) u Stream APIってどんなもの︖ ⼯場(ベルトコンベア)のように、データを1つずつ流して
処理していくイメージ
Stream APIってこんなもの Stream APIでの処理は ・⽣成 ・中間操作(加⼯) ・終端操作(まとめ) から成り⽴っているよ WEB+DB PRESS
vol.117 ⾒なおそう! モダンJavaの流儀 第1回 より
Stream APIの操作たち u ⽣成 リストや配列からStreamのインスタンスを⽣成するよ u リスト.stream()、Stream.of(配列)、Arrays.stream(配列) など u 中間操作(加⼯)
流れてきたデータを加⼯するよ。複数の中間操作を繋げて使えるよ u filter︓データをフィルタリングする u map︓流れてきたデータに処理をする など
Stream APIの操作たち u 終端操作(まとめ) 加⼯し終わったデータで終わりの処理をするよ u collect︓データを指定した形でまとめる u toList(データをListに変換する) u
groupingBy(データをグルーピングしてMapに変換する)など u forEach︓繰り返し処理をする(それぞれのデータにアクションを⾏う) u min, max︓stream内で最⼩、最⼤のデータを取得する(返す) u count︓streamのデータの個数を取得する(返す) など
ラムダ式ってなに︖ (ざっくり⾔うと)メソッドの引数などに処理をそのまま渡せる便利な書き⽅ ・(引数) -> {処理} が基本的な書き⽅ (String name) -> {
return name.concat("さん"); } ・引数の型は省略できる。引数が1つだけの場合は()も省略できる name -> { return name.concat("さん"); } ・ラムダ式内の処理が1つだけの場合は、{}やreturnを省略できる name -> name.concat("さん");
Stream APIでラムダ式を使うと便利 データを⼀つずつ処理するStream APIと、ラムダ式はとても相性がいい◦ List<String> names = Arrays.asList(”森本”, ”岸⽥”, ”⼯藤”,
”⽯⽥”, ”森下”, ”児⽟”, ”⼩泉”, ”村⼭”); names.stream() .map(name -> name.concat(”さん”)) .forEach(name -> System.out.println(name));
おわり u 今回参考にした⽂献はこちら u Java本格⼊⾨ 〜モダンスタイルによる基礎からオブジェクト指向・実⽤ライブラリまで https://gihyo.jp/book/2017/978-4-7741-8909-3 u Javaによる関数型プログラミング――Java 8ラムダ式とStream
https://www.oreilly.co.jp/books/9784873117041/ u WEB+DB PRESS Vol.117 ⾒なおそう! モダンJavaの流儀 第1回 https://gihyo.jp/magazine/wdpress/archive/2020/vol117