Enviar pesquisa
Carregar
Java SE 8 lambdaで変わる プログラミングスタイル
•
27 gostaram
•
18,041 visualizações
なおき きしだ
Seguir
福岡JavaOne2013報告会第2弾でのプレゼン ラムダ構文の文法よりも、その使い方とプログラミングスタイルについてを主にまとめました。
Leia menos
Leia mais
Tecnologia
Notícias e política
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 48
Baixar agora
Baixar para ler offline
Recomendados
from old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition
心 谷本
60分で体験する Stream / Lambda ハンズオン
60分で体験する Stream / Lambda ハンズオン
Hiroto Yamakawa
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI
Akihiro Ikezoe
Unicode文字列処理
Unicode文字列処理
信之 岩永
C#coding guideline その2_20130325
C#coding guideline その2_20130325
Yoshihisa Ozaki
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
bitter_fox
GraphQL入門
GraphQL入門
Kent Ohashi
C# コーディングガイドライン 2013/02/26
C# コーディングガイドライン 2013/02/26
Yoshihisa Ozaki
Recomendados
from old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition
心 谷本
60分で体験する Stream / Lambda ハンズオン
60分で体験する Stream / Lambda ハンズオン
Hiroto Yamakawa
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI
Akihiro Ikezoe
Unicode文字列処理
Unicode文字列処理
信之 岩永
C#coding guideline その2_20130325
C#coding guideline その2_20130325
Yoshihisa Ozaki
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]
bitter_fox
GraphQL入門
GraphQL入門
Kent Ohashi
C# コーディングガイドライン 2013/02/26
C# コーディングガイドライン 2013/02/26
Yoshihisa Ozaki
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
Java8勉強会
Java8勉強会
賢太郎 前多
Spring bootでweb 基本編
Spring bootでweb 基本編
なべ
今こそStream API入門
今こそStream API入門
Yuichi Sakuraba
Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15
Mitsuru Kariya
RESTfulとは
RESTfulとは
星影 月夜
Json型の使い方
Json型の使い方
tsudaa
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
koji lin
BrowserMob-Proxyのお話
BrowserMob-Proxyのお話
Masahiko Hashimoto
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
信之 岩永
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
Electron で作るはじめてのguiアプリ
Electron で作るはじめてのguiアプリ
祐磨 堀
C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版
信之 岩永
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
Ra Zon
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
金勘定のためのBigDecimalそしてMoney and Currency API
金勘定のためのBigDecimalそしてMoney and Currency API
Taku Miyakawa
Spectacular Future with clojure.spec
Spectacular Future with clojure.spec
Kent Ohashi
scryptos onsite(plaid CTF)
scryptos onsite(plaid CTF)
RKX1209
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
LINE Corporation
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
Yuuki Fukuda
勉強会に参加しないと不幸になる話
勉強会に参加しないと不幸になる話
なおき きしだ
Mais conteúdo relacionado
Mais procurados
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
Java8勉強会
Java8勉強会
賢太郎 前多
Spring bootでweb 基本編
Spring bootでweb 基本編
なべ
今こそStream API入門
今こそStream API入門
Yuichi Sakuraba
Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15
Mitsuru Kariya
RESTfulとは
RESTfulとは
星影 月夜
Json型の使い方
Json型の使い方
tsudaa
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
koji lin
BrowserMob-Proxyのお話
BrowserMob-Proxyのお話
Masahiko Hashimoto
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
信之 岩永
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
Electron で作るはじめてのguiアプリ
Electron で作るはじめてのguiアプリ
祐磨 堀
C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版
信之 岩永
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
Ra Zon
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
金勘定のためのBigDecimalそしてMoney and Currency API
金勘定のためのBigDecimalそしてMoney and Currency API
Taku Miyakawa
Spectacular Future with clojure.spec
Spectacular Future with clojure.spec
Kent Ohashi
scryptos onsite(plaid CTF)
scryptos onsite(plaid CTF)
RKX1209
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
LINE Corporation
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
Mais procurados
(20)
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
Java8勉強会
Java8勉強会
Spring bootでweb 基本編
Spring bootでweb 基本編
今こそStream API入門
今こそStream API入門
Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15
RESTfulとは
RESTfulとは
Json型の使い方
Json型の使い方
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
BrowserMob-Proxyのお話
BrowserMob-Proxyのお話
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Electron で作るはじめてのguiアプリ
Electron で作るはじめてのguiアプリ
C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
金勘定のためのBigDecimalそしてMoney and Currency API
金勘定のためのBigDecimalそしてMoney and Currency API
Spectacular Future with clojure.spec
Spectacular Future with clojure.spec
scryptos onsite(plaid CTF)
scryptos onsite(plaid CTF)
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Destaque
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
Yuuki Fukuda
勉強会に参加しないと不幸になる話
勉強会に参加しないと不幸になる話
なおき きしだ
ぼくの実装した最弱のディープラーニング
ぼくの実装した最弱のディープラーニング
なおき きしだ
だれも教えてくれない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道
なおき きしだ
2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
Preferred Networks
Destaque
(20)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
勉強会に参加しないと不幸になる話
勉強会に参加しないと不幸になる話
ぼくの実装した最弱のディープラーニング
ぼくの実装した最弱のディープラーニング
だれも教えてくれない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道
2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
Semelhante a 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
Semelhante a 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
Mais 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のメモリログから...
なおき きしだ
人工知能に何ができないか
人工知能に何ができないか
なおき きしだ
Mais 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のメモリログから...
人工知能に何ができないか
人工知能に何ができないか
Último
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
Último
(8)
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
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!
Baixar agora