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
GraphQLとの向き合い方2022年版
quramy
49
14k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.4k
Site-Speed That Sticks
csswizardry
10
700
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
47
9.6k
Adopting Sorbet at Scale
ufuk
77
9.5k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.1k
Automating Front-end Workflow
addyosmani
1370
200k
Rails Girls Zürich Keynote
gr2m
95
14k
The Cost Of JavaScript in 2023
addyosmani
51
8.6k
Docker and Python
trallard
45
3.5k
A designer walks into a library…
pauljervisheath
207
24k
Agile that works and the tools we love
rasmusluckow
329
21k
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