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
120
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
280
オブジェクト指向がわからない(202201社内勉強会)
mii1004
0
150
たのしい情報収集(202112社内勉強会)
mii1004
0
99
リファクタリング?(202111社内勉強会)
mii1004
0
88
OpenAPI Generator使ってみる(Java女子部ハロウィンLT)
mii1004
0
76
ビルドツールの話(202110社内勉強会)
mii1004
0
120
Hello Spring(202109社内勉強会)
mii1004
0
97
Javaはじめのいっぽ(202107社内勉強会)
mii1004
0
120
Featured
See All Featured
Producing Creativity
orderedlist
PRO
346
40k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Done Done
chrislema
184
16k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.4k
Git: the NoSQL Database
bkeepers
PRO
430
65k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Raft: Consensus for Rubyists
vanstee
140
7k
How to Ace a Technical Interview
jacobian
278
23k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
How to Think Like a Performance Engineer
csswizardry
25
1.7k
KATA
mclloyd
30
14k
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