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
90
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
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Navigating Team Friction
lara
187
15k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Designing for humans not robots
tammielis
253
25k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Visualization
eitanlees
146
16k
Designing Experiences People Love
moore
142
24k
Raft: Consensus for Rubyists
vanstee
140
7k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
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