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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
shimadamiyuki
August 19, 2021
150
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
StreamAPI, Lambdaと仲良くなる(202108社内勉強会)
月一で実施している社内勉強会の資料です(2021.08)
shimadamiyuki
August 19, 2021
More Decks by shimadamiyuki
See All by shimadamiyuki
20240912 JJUGナイトセミナー
mii1004
0
270
STORES決済の裏側のはなし(Code Polaris 色んなエンジニアLT大会)
mii1004
0
320
オブジェクト指向がわからない(202201社内勉強会)
mii1004
0
200
たのしい情報収集(202112社内勉強会)
mii1004
0
130
リファクタリング?(202111社内勉強会)
mii1004
0
120
OpenAPI Generator使ってみる(Java女子部ハロウィンLT)
mii1004
0
100
ビルドツールの話(202110社内勉強会)
mii1004
0
150
Hello Spring(202109社内勉強会)
mii1004
0
140
Javaはじめのいっぽ(202107社内勉強会)
mii1004
0
160
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Scaling GitHub
holman
464
140k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
30 Presentation Tips
portentint
PRO
1
320
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
What's in a price? How to price your products and services
michaelherold
247
13k
The Invisible Side of Design
smashingmag
302
52k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
200
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
570
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
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