Soumettre la recherche
Mettre en ligne
Java SE 8 lambdaで変わる プログラミングスタイル
•
27 j'aime
•
18,041 vues
なおき きしだ
Suivre
福岡JavaOne2013報告会第2弾でのプレゼン ラムダ構文の文法よりも、その使い方とプログラミングスタイルについてを主にまとめました。
Lire moins
Lire la suite
Technologie
Actualités & Politique
Signaler
Partager
Signaler
Partager
1 sur 48
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
60分で体験する Stream / Lambda ハンズオン
60分で体験する Stream / Lambda ハンズオン
Hiroto Yamakawa
from old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition
心 谷本
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
Kris Mok
Blazing Performance with Flame Graphs
Blazing Performance with Flame Graphs
Brendan Gregg
Event-sourced architectures with Akka
Event-sourced architectures with Akka
Sander Mak (@Sander_Mak)
Java threads
Java threads
Prabhakaran V M
Java Concurrency Gotchas
Java Concurrency Gotchas
Alex Miller
JVM JIT compilation overview by Vladimir Ivanov
JVM JIT compilation overview by Vladimir Ivanov
ZeroTurnaround
Recommandé
60分で体験する Stream / Lambda ハンズオン
60分で体験する Stream / Lambda ハンズオン
Hiroto Yamakawa
from old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition
心 谷本
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
Kris Mok
Blazing Performance with Flame Graphs
Blazing Performance with Flame Graphs
Brendan Gregg
Event-sourced architectures with Akka
Event-sourced architectures with Akka
Sander Mak (@Sander_Mak)
Java threads
Java threads
Prabhakaran V M
Java Concurrency Gotchas
Java Concurrency Gotchas
Alex Miller
JVM JIT compilation overview by Vladimir Ivanov
JVM JIT compilation overview by Vladimir Ivanov
ZeroTurnaround
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
Steve Pember
UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)
Kris Mok
Migrating to Java 11
Migrating to Java 11
Arto Santala
JavaOne 2012 - JVM JIT for Dummies
JavaOne 2012 - JVM JIT for Dummies
Charles Nutter
Black Hat EU 2010 - Attacking Java Serialized Communication
Black Hat EU 2010 - Attacking Java Serialized Communication
msaindane
Java Thread Synchronization
Java Thread Synchronization
Benj Del Mundo
Fixing the Java Serialization Mess
Fixing the Java Serialization Mess
Salesforce Engineering
OWASP AppSecCali 2015 - Marshalling Pickles
OWASP AppSecCali 2015 - Marshalling Pickles
Christopher Frohoff
Functional Java 8 in everyday life
Functional Java 8 in everyday life
Andrea Iacono
[164] pinpoint
[164] pinpoint
NAVER D2
Java 8 Streams
Java 8 Streams
Manvendra Singh
Sum and Product Types -The Fruit Salad & Fruit Snack Example - From F# to Ha...
Sum and Product Types -The Fruit Salad & Fruit Snack Example - From F# to Ha...
Philip Schwarz
AngularJS Internal
AngularJS Internal
Eyal Vardi
[D2]pinpoint 개발기
[D2]pinpoint 개발기
NAVER D2
その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?
Narimichi Takamura
Asfws 2014 slides why .net needs ma-cs and other serial(-ization) tales_v2.0
Asfws 2014 slides why .net needs ma-cs and other serial(-ization) tales_v2.0
Cyber Security Alliance
IdrisでWebアプリを書く
IdrisでWebアプリを書く
Hideyuki Tanaka
MySQL Performance Schema in MySQL 8.0
MySQL Performance Schema in MySQL 8.0
Mayank Prasad
JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013
Vladimir Ivanov
Intrinsic Methods in HotSpot VM
Intrinsic Methods in HotSpot VM
Kris Mok
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
Yuuki Fukuda
勉強会に参加しないと不幸になる話
勉強会に参加しないと不幸になる話
なおき きしだ
Contenu connexe
Tendances
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
Steve Pember
UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)
Kris Mok
Migrating to Java 11
Migrating to Java 11
Arto Santala
JavaOne 2012 - JVM JIT for Dummies
JavaOne 2012 - JVM JIT for Dummies
Charles Nutter
Black Hat EU 2010 - Attacking Java Serialized Communication
Black Hat EU 2010 - Attacking Java Serialized Communication
msaindane
Java Thread Synchronization
Java Thread Synchronization
Benj Del Mundo
Fixing the Java Serialization Mess
Fixing the Java Serialization Mess
Salesforce Engineering
OWASP AppSecCali 2015 - Marshalling Pickles
OWASP AppSecCali 2015 - Marshalling Pickles
Christopher Frohoff
Functional Java 8 in everyday life
Functional Java 8 in everyday life
Andrea Iacono
[164] pinpoint
[164] pinpoint
NAVER D2
Java 8 Streams
Java 8 Streams
Manvendra Singh
Sum and Product Types -The Fruit Salad & Fruit Snack Example - From F# to Ha...
Sum and Product Types -The Fruit Salad & Fruit Snack Example - From F# to Ha...
Philip Schwarz
AngularJS Internal
AngularJS Internal
Eyal Vardi
[D2]pinpoint 개발기
[D2]pinpoint 개발기
NAVER D2
その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?
Narimichi Takamura
Asfws 2014 slides why .net needs ma-cs and other serial(-ization) tales_v2.0
Asfws 2014 slides why .net needs ma-cs and other serial(-ization) tales_v2.0
Cyber Security Alliance
IdrisでWebアプリを書く
IdrisでWebアプリを書く
Hideyuki Tanaka
MySQL Performance Schema in MySQL 8.0
MySQL Performance Schema in MySQL 8.0
Mayank Prasad
JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013
Vladimir Ivanov
Intrinsic Methods in HotSpot VM
Intrinsic Methods in HotSpot VM
Kris Mok
Tendances
(20)
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)
Migrating to Java 11
Migrating to Java 11
JavaOne 2012 - JVM JIT for Dummies
JavaOne 2012 - JVM JIT for Dummies
Black Hat EU 2010 - Attacking Java Serialized Communication
Black Hat EU 2010 - Attacking Java Serialized Communication
Java Thread Synchronization
Java Thread Synchronization
Fixing the Java Serialization Mess
Fixing the Java Serialization Mess
OWASP AppSecCali 2015 - Marshalling Pickles
OWASP AppSecCali 2015 - Marshalling Pickles
Functional Java 8 in everyday life
Functional Java 8 in everyday life
[164] pinpoint
[164] pinpoint
Java 8 Streams
Java 8 Streams
Sum and Product Types -The Fruit Salad & Fruit Snack Example - From F# to Ha...
Sum and Product Types -The Fruit Salad & Fruit Snack Example - From F# to Ha...
AngularJS Internal
AngularJS Internal
[D2]pinpoint 개발기
[D2]pinpoint 개발기
その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?
Asfws 2014 slides why .net needs ma-cs and other serial(-ization) tales_v2.0
Asfws 2014 slides why .net needs ma-cs and other serial(-ization) tales_v2.0
IdrisでWebアプリを書く
IdrisでWebアプリを書く
MySQL Performance Schema in MySQL 8.0
MySQL Performance Schema in MySQL 8.0
JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013
Intrinsic Methods in HotSpot VM
Intrinsic Methods in HotSpot VM
En vedette
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
Yuuki Fukuda
勉強会に参加しないと不幸になる話
勉強会に参加しないと不幸になる話
なおき きしだ
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI
Akihiro Ikezoe
ぼくの実装した最弱のディープラーニング
ぼくの実装した最弱のディープラーニング
なおき きしだ
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
なおき きしだ
乱数のたのしい話
乱数のたのしい話
なおき きしだ
Java9新機能概要
Java9新機能概要
HonMarkHunt
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
bitter_fox
JavaOne2016報告
JavaOne2016報告
なおき きしだ
JJUG CCC 2014 fall Javaが見るニュータイプの夢
JJUG CCC 2014 fall Javaが見るニュータイプの夢
なおき きしだ
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
なおき きしだ
Javaプログラミング入門
Javaプログラミング入門
なおき きしだ
そろそろJavaみなおしてもええんやで
そろそろJavaみなおしてもええんやで
なおき きしだ
Effective java 輪読会 第6章 項目30-31
Effective java 輪読会 第6章 項目30-31
Appresso Engineering Team
Effective java 輪読会 第6章 項目32-34
Effective java 輪読会 第6章 項目32-34
Appresso Engineering Team
職業人講和20140403
職業人講和20140403
なおき きしだ
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
なおき きしだ
JavaOne2015報告またはこれからのJava
JavaOne2015報告またはこれからのJava
なおき きしだ
Javaでのバリデーション 〜Bean Validation篇〜
Javaでのバリデーション 〜Bean Validation篇〜
eiryu
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
なおき きしだ
En vedette
(20)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
勉強会に参加しないと不幸になる話
勉強会に参加しないと不幸になる話
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI
ぼくの実装した最弱のディープラーニング
ぼくの実装した最弱のディープラーニング
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
乱数のたのしい話
乱数のたのしい話
Java9新機能概要
Java9新機能概要
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
JavaOne2016報告
JavaOne2016報告
JJUG CCC 2014 fall Javaが見るニュータイプの夢
JJUG CCC 2014 fall Javaが見るニュータイプの夢
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
Javaプログラミング入門
Javaプログラミング入門
そろそろJavaみなおしてもええんやで
そろそろJavaみなおしてもええんやで
Effective java 輪読会 第6章 項目30-31
Effective java 輪読会 第6章 項目30-31
Effective java 輪読会 第6章 項目32-34
Effective java 輪読会 第6章 項目32-34
職業人講和20140403
職業人講和20140403
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
JavaOne2015報告またはこれからのJava
JavaOne2015報告またはこれからのJava
Javaでのバリデーション 〜Bean Validation篇〜
Javaでのバリデーション 〜Bean Validation篇〜
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
Similaire à Java SE 8 lambdaで変わる プログラミングスタイル
Rの高速化
Rの高速化
弘毅 露崎
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
Ransui Iso
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
Haruka Oikawa
たのしい関数型
たのしい関数型
Shinichi Kozake
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Ouka Yuka
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
Java8から始める関数型プログラミング
Java8から始める関数型プログラミング
stylefreeslide
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Satoshi imai
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
SatoYu1ro
Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
アルゴリズム+データ構造勉強会(8)
アルゴリズム+データ構造勉強会(8)
noldor
PHP AST 徹底解説
PHP AST 徹底解説
do_aki
Project lambda
Project lambda
Appresso Engineering Team
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Uehara Junji
from old Java to modern Java
from old Java to modern Java
心 谷本
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
Satoshi Yamada
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
sohta
Java Puzzlers JJUG CCC 2016
Java Puzzlers JJUG CCC 2016
Yoshio Terada
Similaire à Java SE 8 lambdaで変わる プログラミングスタイル
(20)
Rの高速化
Rの高速化
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
たのしい関数型
たのしい関数型
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Java8から始める関数型プログラミング
Java8から始める関数型プログラミング
関数プログラミング入門
関数プログラミング入門
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
Clojure programming-chapter-2
Clojure programming-chapter-2
アルゴリズム+データ構造勉強会(8)
アルゴリズム+データ構造勉強会(8)
PHP AST 徹底解説
PHP AST 徹底解説
Project lambda
Project lambda
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
from old Java to modern Java
from old Java to modern Java
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
Java Puzzlers JJUG CCC 2016
Java Puzzlers JJUG CCC 2016
Plus de なおき きしだ
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
なおき きしだ
GraalVM at Fukuoka LT
GraalVM at Fukuoka LT
なおき きしだ
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
なおき きしだ
GraalVMについて
GraalVMについて
なおき きしだ
VRカメラが楽しいのでブラウザで見たくなった話
VRカメラが楽しいのでブラウザで見たくなった話
なおき きしだ
最近のJava事情
最近のJava事情
なおき きしだ
怖いコードの話 2018/7/18
怖いコードの話 2018/7/18
なおき きしだ
Java新機能観察日記 - JJUGナイトセミナー
Java新機能観察日記 - JJUGナイトセミナー
なおき きしだ
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
なおき きしだ
これからのコンピューティングの変化とこれからのプログラミング at 広島
これからのコンピューティングの変化とこれからのプログラミング at 広島
なおき きしだ
Summary of JDK10 and What will come into JDK11
Summary of JDK10 and What will come into JDK11
なおき きしだ
Summary of JDK10 and What will come into JDK11
Summary of JDK10 and What will come into JDK11
なおき きしだ
Java10 and Java11 at JJUG CCC 2018 Spr
Java10 and Java11 at JJUG CCC 2018 Spr
なおき きしだ
New thing in JDK10 even that scala-er should know
New thing in JDK10 even that scala-er should know
なおき きしだ
Java Release Model (on Scala Matsuri)
Java Release Model (on Scala Matsuri)
なおき きしだ
これからのJava言語と実行環境
これからのJava言語と実行環境
なおき きしだ
JavaOne報告2017
JavaOne報告2017
なおき きしだ
JavaOne2017で感じた、Javaのいまと未来 in 大阪
JavaOne2017で感じた、Javaのいまと未来 in 大阪
なおき きしだ
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
なおき きしだ
人工知能に何ができないか
人工知能に何ができないか
なおき きしだ
Plus de なおき きしだ
(20)
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVM at Fukuoka LT
GraalVM at Fukuoka LT
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
GraalVMについて
GraalVMについて
VRカメラが楽しいのでブラウザで見たくなった話
VRカメラが楽しいのでブラウザで見たくなった話
最近のJava事情
最近のJava事情
怖いコードの話 2018/7/18
怖いコードの話 2018/7/18
Java新機能観察日記 - JJUGナイトセミナー
Java新機能観察日記 - JJUGナイトセミナー
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
これからのコンピューティングの変化とこれからのプログラミング at 広島
これからのコンピューティングの変化とこれからのプログラミング at 広島
Summary of JDK10 and What will come into JDK11
Summary of JDK10 and What will come into JDK11
Summary of JDK10 and What will come into JDK11
Summary of JDK10 and What will come into JDK11
Java10 and Java11 at JJUG CCC 2018 Spr
Java10 and Java11 at JJUG CCC 2018 Spr
New thing in JDK10 even that scala-er should know
New thing in JDK10 even that scala-er should know
Java Release Model (on Scala Matsuri)
Java Release Model (on Scala Matsuri)
これからのJava言語と実行環境
これからのJava言語と実行環境
JavaOne報告2017
JavaOne報告2017
JavaOne2017で感じた、Javaのいまと未来 in 大阪
JavaOne2017で感じた、Javaのいまと未来 in 大阪
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
人工知能に何ができないか
人工知能に何ができないか
Dernier
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Dernier
(11)
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
Java SE 8 lambdaで変わる プログラミングスタイル
1.
Java SE 8
lambdaで変わる プログラミングスタイル 2013/11/15 きしだなおき
2.
ラムダがきたよ ● ● ● 匿名関数 関数型スタイルには必須 流行!
3.
JavaOneでのラムダ ● ● ● 関連セッションが大人気!! どのセッションも行列!! 人数オーバーで入れない!!
4.
ラムダの目的 ● ● 建前:並列化 本音:Cool!!
5.
ラムダ構文 ● ● ● ● 関数型インタフェース ラムダ記法 メソッド参照 interfaceのデフォルトメソッド
6.
関数型インタフェース ● 実装すべきメソッドがひとつだけのインタフェース – Runnable ● – ActionListener ● ● 実装すべきメソッド:run() 実装すべきメソッド:actionPerformed(ActionEvent) @FuncationalInterfaceで検査可能
7.
用意された関数型インタフェース http://d.hatena.ne.jp/nowokay/20130824#1377300917
8.
ラムダ構文の基礎 ActionListener al =
new ActionListener() { @Override public void actionPerformed(ActionEvent e) { taOutput.append(txtMessage.getText() + "n"); } };
9.
ラムダ構文の基礎 ActionListener al =
new ActionListener() { @Override public void actionPerformed(ActionEvent e) { taOutput.append(txtMessage.getText() + "n"); } }; インタフェース名やメソッド名は推論される
10.
ラムダ構文の基礎 ActionListener al =
new ActionListener() { @Override public void actionPerformed(ActionEvent e) { taOutput.append(txtMessage.getText() + "n"); } }; 引数とメソッド本体の間に「->」が入る ->
11.
ラムダ構文の基礎 ActionListener al =
new ActionListener() { @Override public void actionPerformed(ActionEvent e) { taOutput.append(txtMessage.getText() + "n"); } }; ActionListener al = (ActionEvent e) -> { taOutput.append(txtMessage.getText() + "n"); }; ->
12.
ラムダ構文の基礎 ● IDEで変換
13.
ラムダ構文の基礎 ActionListener al =
new ActionListener() { @Override public void actionPerformed(ActionEvent e) { taOutput.append(txtMessage.getText() + "n"); } }; ActionListener al = (ActionEvent e) -> { taOutput.append(txtMessage.getText() + "n"); }; 引数の型も省略できる ->
14.
ラムダ構文の基礎 ActionListener al =
new ActionListener() { @Override public void actionPerformed(ActionEvent e) { taOutput.append(txtMessage.getText() + "n"); } }; ActionListener al = (ActionEvent e) -> { taOutput.append(txtMessage.getText() + "n"); }; 引数がひとつならカッコが省略できる ->
15.
ラムダ構文の基礎 ActionListener al =
new ActionListener() { @Override public void actionPerformed(ActionEvent e) { taOutput.append(txtMessage.getText() + "n"); } }; ActionListener al = (ActionEvent e) -> { taOutput.append(txtMessage.getText() + "n"); }; 本文が一行ならカッコとセミコロンが省略できる (return文のときはreturnも省略) ->
16.
ラムダ構文の基礎 ActionListener al =
new ActionListener() { @Override public void actionPerformed(ActionEvent e) { taOutput.append(txtMessage.getText() + "n"); } }; ActionListener al = e ->taOutput.append(txtMessage.getText() + "n"); ->
17.
メソッド参照 ● 引数ひとつのインスタンスメソッド – ● インスタンス::メソッド 引数ひとつのstaticメソッド 引数なしのインスタンスメソッド – クラス::メソッド public void init()
{ btnInput.addActionListener(this::inputClicked); } public void inputClicked(ActionEvent ae){ taOutput.append(txtMessage.getText() + "n"); }
18.
デフォルトメソッド ● Listなどへのラムダ対応が必要 ● interfaceがメソッドをもてる ● ついでに多重継承もできる @FunctionalInterface interface Hoge{ String foo(); default
void bar(){ System.out.println(foo() + "ですってバー"); } } void proc(){ Hoge h = () -> "やあ"; h.bar(); }
19.
Stream ● 外部イテレーションから内部イテレーションへ – 外部イテレーション(for) – 内部イテレーション(Stream)
20.
Stream 外部イテレーション for(String s :
strs){ if(!s.startsWith("h")){ continue; } String u = s.toUpperCase(); System.out.println(u); } 内部イテレーション strs.stream() .filter(s -> s.startsWith("h")) .map(s -> s.toUpperCase()) .forEach(System.out::println);
21.
操作種別 ● ソース – ● 中間操作 – ● 操作対象になる 他のStreamを生成する 終端操作 – 結果の実行
22.
ソース ソース 並列性 特徴 ArrayList、配列 良い SIZED, ORDERED LinkedList 悪い SIZED, ORDERED HashSet まあまあ SIZED,
DISTINCT TreeSet まあまあ SIZED, DISTINCT, SORTED, ORDERED IntStream.range 良い SIZED, DISTINCT, SORTED, ORDERED BufferedReader.lines 悪い ORDERED 特徴 説明 SIZED サイズが決まっている DISTINCT 重複なし ORDERED 順番つき SORTED 整列済
23.
中間操作 操作 効果 追記 fiter() SIZEDがはずれる map() DISTINCT, SORTEDがはずれる sorted() SORTED, ORDEREDが追加 SORTEDならなにもしない distinct() DISTINCTが追加 DISTINCTならなにもしない limit() すべてそのまま
24.
終端操作 集計 toArray reduce collect sum,min,max,count anyMatch, allMatch イテレーション forEach 検索 findFirst findAny
25.
プログラムモデルの変化 ● ● ● ● ● ● リダクション(畳み込み) 並列処理 遅延実行 無限ストリーム メモ化(実行結果キャッシュ) null排除
26.
リダクション(畳み込み) ● ストリームの値をひとつにまとめる 3 5 3 8 6 1 3 9 38 int s =
IntStream.of(3, 5, 3, 8, 6, 1, 3, 9) .sum();
27.
リダクション:集計 int[] ar =
{3, 5, 3, 8, 6, 1, 3, 9}; int total = 0; for(int i : ar){ total += i; } System.out.println(total); int[] ar = {3, 5, 3, 8, 6, 1, 3, 9}; System.out.println(Arrays.stream(ar).sum());
28.
リダクションリスト変換 List<Integer> al =
Arrays.asList(3, 5, 3, 8, 6, 1, 3, 9); List<Integer> pows = new ArrayList<>(); for(int i : al){ if(i >= 5){ continue; } int pow = i * i; pows.add(pow); } List<Integer> al = Arrays.asList(3, 5, 3, 8, 6, 1, 3, 9); List<Integer> pows = al.stream() .filter(i -> i < 5) .map(i -> i * i) .collect(Collectors.toList());
29.
リダクション:判定 List<Integer> al =
Arrays.asList(3, 5, 3, 8, 6, 1, 3, 9); boolean flag = true; for(int i : al){ if(i >= 10){ flag = false; } } List<Integer> al = Arrays.asList(3, 5, 3, 8, 6, 1, 3, 9); boolean flag = al.stream() .allMatch(i -> i < 10);
30.
リダクション:グループ化 List<String> strs =
Arrays.asList("hello", "paul", "heaven", "tatsuro"); Map<String, List<String>> result = new HashMap<>(); for(String s : strs){ String head = s.substring(0, 1); List<String> list = result.get(head); if(list == null){ list = new ArrayList<>(); result.put(head, list); } list.add(s); } for(Map.Entry<String, List<String>> me : result.entrySet()){ System.out.println(me.getKey() + ":" + me.getValue()); } List<String> strs = Arrays.asList("hello", "paul", "heaven", "tatsuro"); Map<String, List<String>> result = strs.stream() .collect(Collectors.groupingBy(s -> s.substring(0, 1))); result.forEach((k, v) -> System.out.println(k + ": " + v));
31.
リダクション:reduce ● 例:合計 – (((0 + a1)
+ a2) + a3) – .sum() ⇒.reduce(0, (s, e) -> s + e) – .count() ⇒.map(e -> 1).sum()
32.
リダクション:reduce ● reduce(単位元, (s, e)
-> s * e) – – ● s * e:結合則のある2項演算 結合則:(s1 * s2) * s3=s1 * (s2 * s3) 単位元:zを単位元とすると、 s*z=z*s=s 例: – a + b[単位元0] – a × b[単位元1] – a and b[単位元 true] – list.add(b)[単位元 new ArrayList()]
33.
リダクション(畳み込み)で何が変わるか ● ● ● 中間状態の隠蔽 中間状態の管理が不要になる 畳み込み操作でのバグは中間状態の操作ミスが 多かった
34.
並列処理 ● stream()の代わりにparallelStream()にするだけ – もしくはparallel()の呼び出し 3 5 3 38 8 8 6 38 11 1 3 38 7 9 12 38 19 38 19 38 int s =
IntStream.of(3, 5, 3, 8, 6, 1, 3, 9) .parallel() .sum();
35.
遅延実行 ● ● ● Javaは即時評価の言語 メソッド内で使われない値でも引数に渡すときに計 算が必要だった ほとんどの場合に表示されないログやエラーでの メッセージ生成が無駄 logger.info(objWithManyFields.toString()); Objects.requireNonNull(objWithManyFields.getHoge(), objWithManyFields.toString());
36.
遅延実行 ● ● ラムダ式を渡すことで、必要なときに式を評価 LoggerやObjects.requireNonNullは対応 logger.info(() -> objWithManyFields.toString()); Objects.requireNonNull(objWithManyFields.getHoge(), ()
-> objWithManyFields.toString());
37.
遅延実行:Stream Pipeline ● Streamの中間操作は、終端操作のときに実行され る
38.
無限ストリーム
39.
無限ストリーム(リスト) ● Hondaストリームの無限チューンではありません ● 終端の決まらないストリーム 初期値 次の値を求める処理 IntStream.iterate(0, i ->
i + 1) .limit(10) .forEach(System.out::println); IntStream.iterate(321, i -> (i * 211 + 2111) % 1999) .limit(10) .forEach(System.out::println);
40.
メモ化 ● ● 実行結果キャッシュ ex:再帰フィボナッチ public static void
main(String... args){ LongStream.iterate(1, i -> i + 1) .map(i -> fib(i)) .forEach(System.out::println); } public static long fib(long x){ if(x <= 2) return 1; return fib(x - 1) + fib(x - 2); }
41.
メモ化:再帰フィボナッチ ● 1回ごとに2回の呼び出し – ● O(2^n) なかなか進まない! run: 1 1 2 3 5 8 13 ・ ・ ・ 1836311903 2971215073 4807526976←このあたりで止まる
42.
メモ化:メモ化再帰フィボナッチ ● ● ● 同じパラメータで何度も呼び出される 結果キャッシュ⇒メモ化! computeIfAbsentが便利 static Map<Long, Long>
cache = new HashMap<>(); public static long fib(long i){ return cache.computeIfAbsent(i, x -> { if(x <= 2) return 1L; return fib(x - 1) + fib(x - 2); }); } あっという間にlongも桁あふれ -415292901391291839 -7413871255405604094 -7829164156796895933 3203708661507051589 -4625455495289844344
43.
null排除 ● みんな大好きNullPointerException! static String foo(int
x){ return x > 0 && x < 10 ? IntStream.range(0, x) .mapToObj(c -> (char)('a' + c) + "") .collect(Collectors.joining()) : null; } static String bar(String s){ return s.chars().max().orElse(0) % 2 == 0 ? null : s; } public static void main(String... args){ for(int i = 0; i < 20; ++i){ String s = bar(foo(i)).toUpperCase(); System.out.println(s); } } nullを返す可能性 nullを返す可能性 NullPointerException の可能性
44.
null排除:確実なnullチェックは面倒 for(int i =
0; i < 20; ++i){ String s = bar(foo(i)).toUpperCase(); System.out.println(s); } IntStream.range(0, 20) .mapToObj(MyClass::foo) .map(MyClass::bar) .map(String::toUpperCase) .forEach(System.out::println); 要nullチェック 呼び出しの分 解も必要 Streamでも要 nullチェック for(int i = 0; i < 20; ++i){ String s = foo(i); if(s == null) continue; String s2 = bar(s); if(s2 == null) continue; String up = s2.toUpperCase(); System.out.println(up); } IntStream.range(0, 20) .mapToObj(MyClass::foo) .filter(Objects::nonNull) .map(MyClass::bar) .filter(Objects::nonNull) .map(String::toUpperCase) .forEach(System.out::println);
45.
null排除:Optional ● ● 型としてnullの可能性を示せる nullへの対処が 書きやすい Optionalが返る 一度Optionalにくるまれると nullが返っても気にならない static Optional<String> foo(int
x){ return x > 0 && x < 10 ? Optional.of(IntStream.range(0, x) .mapToObj(c -> (char)('a' + c) + "") .collect(Collectors.joining())) : Optional.empty(); } static String bar(String s){ return s.chars().max().orElse(0) % 2 == 0 ? null : s; } public static void main(String... args){ for(int i = 0; i < 20; ++i){ foo(i) .map(MyClass::bar) .map(String::toUpperCase) .ifPresent(System.out::println); } }
46.
null排除:Optional#flatMap static Optional<String> foo(int
x){ return x > 0 && x < 10 ? Optional.of(IntStream.range(0, x) .mapToObj(c -> (char)('a' + c) + "") .collect(Collectors.joining())) : Optional.empty(); } static Optional<String> bar(String s){ return s.chars().max().orElse(0) % 2 == 0 ? Optional.empty() : Optional.of(s); } public static void main(String... args){ for(int i = 0; i < 20; ++i){ foo(i) .flatMap(MyClass::bar) .map(String::toUpperCase) .ifPresent(System.out::println); } } Optionalが返るものを はさむならflagMap
47.
null排除:Streamだとちょっと面倒かも IntStream.range(0, 20) .mapToObj(MyClass::foo) .forEach(op ->
{ op.flatMap(MyClass::bar) .map(String::toUpperCase) .ifPresent(System.out::println); });
48.
null排除:完璧ではない ● Optional自体がnullだとNullPointerException static Optional<String> foo(int
x){ return x > 0 && x < 10 ? Optional.of(IntStream.range(0, x) .mapToObj(c -> (char)('a' + c) + "") .collect(Collectors.joining())) : null; } static Optional<String> bar(String s){ return s.chars().max().orElse(0) % 2 == 0 ? null : Optional.of(s); } public static void main(String... args){ for(int i = 0; i < 20; ++i){ foo(i) .flatMap(MyClass::bar) .map(String::toUpperCase) .ifPresent(System.out::println); } } nullを返してしまっている NullPointerException!
Télécharger maintenant