SlideShare a Scribd company logo
1 of 50
© 2022 NTT DATA Corporation
コレクションフレームワーク関連セッション
JavaOne & Devoxx報告会 2022
株式会社NTTデータ 阪田 浩一
2022年11月11日
• 想定視聴者: Javaのコレクションフレームワークのクラスを使ったことがあればどなたもOK!
© 2022 NTT DATA Corporation 2
自己紹介
• 株式会社NTTデータ 所属
• JVMがとにかく好き
• JavaOne 2015から毎回参加
• Javaチャンピオン
• OpenJDK Author
• 通算パッチ 10数個
• Oracle ACE Pro (Java分野)
Koichi Sakata
阪田 浩一
jyukutyo
© 2022 NTT DATA Corporation 3
このセッションで話すこと
 コレクションフレームワークが関係する2セッション
© 2022 NTT DATA Corporation 4
このセッションで話すこと
 コレクションフレームワークが関係する2セッション
• Sequenced Collections [LRN1422]
• The Sincerest Form of Flattery [LRN1426]
© 2022 NTT DATA Corporation 5
Sequenced Collections
[LRN1422]
© 2022 NTT DATA Corporation 6
JEP 431: Sequenced Collections
 https://openjdk.org/jeps/431
 順序ありのコレクションを定義するインタフェースを追加する
© 2022 NTT DATA Corporation 7
JEP 431: Sequenced Collections
 https://openjdk.org/jeps/431
 順序ありのコレクションを定義するインタフェースを追加する
 APIを2つ追加する
• コレクションの最初、最後の要素を取得する統一的なAPI
• 順序を逆にする統一的なAPI
© 2022 NTT DATA Corporation 8
JEP 431: Sequenced Collections
 https://openjdk.org/jeps/431
 順序ありのコレクションを定義するインタフェースを追加する
 APIを2つ追加する
• コレクションの最初、最後の要素を取得する統一的なAPI
• 順序を逆にする統一的なAPI
 このJEPはCandidateステータスのため
ドラフト実装をもとにディスカッション中
• https://github.com/openjdk/jdk/pull/7387
© 2022 NTT DATA Corporation 9
スピーカー
 Stuart Marksさん
 Oracle社の方
 このJEP 431のオーナー
 IDEでのコードを使った説明のみのためスライドはなし
• 記憶に加え JEPの記述とドラフトPRのコードを元にレポートします
© 2022 NTT DATA Corporation 10
コレクションフレームワークの課題
 順序ありコレクションとしてListとDequeがあるが
共通のインタフェースはCollectionで順序なしになる
 順序ありのコレクションを表すのに この2つは具体的過ぎる
© 2022 NTT DATA Corporation 11
コレクションフレームワークの課題
 順序ありコレクションとしてListとDequeがあるが
共通のインタフェースはCollectionで順序なしになる
 順序ありのコレクションを表すのに この2つは具体的過ぎる
 Setを例に挙げると SetとHashSetは順序なし
LinkedHashSetとSortedSetは順序あり
使いづらい わかりづらい
加えてunmodifiableSet()すると順序は失われる
© 2022 NTT DATA Corporation 12
コレクションフレームワークの課題
 順序ありコレクションとしてListとDequeがあるが
共通のインタフェースはCollectionで順序なしになる
 順序ありのコレクションを表すのに この2つは具体的過ぎる
 Setを例に挙げると SetとHashSetは順序なし
LinkedHashSetとSortedSetは順序あり
使いづらい わかりづらい
加えてunmodifiableSet()すると順序は失われる
 最初と最後の要素を取得する操作に統一性がない
 降順(逆順)で反復する操作に統一性がない
© 2022 NTT DATA Corporation 13
最初と最後の要素を取得する操作に統一性がない
型 最初の要素取得 最後の要素取得
List list.get(0) list.get(list.size()- 1)
Deque deque.getFirst() deque.getLast()
SortedSet sortedSet.first() sortedSet.last()
LinkedHashSet
linkedHashSet.iterator()
.next()
なし
© 2022 NTT DATA Corporation 14
降順で反復する操作に統一性がない
// NavigableSetだとdescendingSet()で降順のビューを取得できる
for (var e : navSet.descendingSet())
process(e);
// Dequeは降順イテレータが使える
for (var it = deque.descendingIterator(); it.hasNext();) {
var e = it.next();
process(e);
}
// ListだとListIteratorを使う
for (var it = list.listIterator(list.size()); it.hasPrevious();) {
var e = it.previous();
process(e);
}
// LinkedHashSetだと他のコレクションクラスにコピーするしかない
© 2022 NTT DATA Corporation 15
降順で反復する操作に統一性がない
// NavigableSetだとdescendingSet()で降順のビューを取得できる
for (var e : navSet.descendingSet())
process(e);
// Dequeは降順イテレータが使える
for (var it = deque.descendingIterator(); it.hasNext();) {
var e = it.next();
process(e);
}
// ListだとListIteratorを使う
for (var it = list.listIterator(list.size()); it.hasPrevious();) {
var e = it.previous();
process(e);
}
// LinkedHashSetだと他のコレクションクラスにコピーするしかない
加えてSetが返ってくるから
stream()を呼んで
Stream APIを使うことも
IteratorからStream取得は
Spliteratorsに渡して…
と手間がかかる
© 2022 NTT DATA Corporation 16
新しいインタフェースの導入
https://openjdk.org/jeps/431
© 2022 NTT DATA Corporation 17
SequencedCollectionインタフェース
interface SequencedCollection<E> extends Collection<E> {
// 新規追加メソッド
SequencedCollection<E> reversed();
// Dequeから昇格したメソッド
void addFirst(E);
void addLast(E);
E getFirst();
E getLast();
E removeFirst();
E removeLast();
}
set.reversed().stream()
とできる
© 2022 NTT DATA Corporation 18
SequencedSetインタフェース
interface SequencedSet<E> extends Set<E>, SequencedCollection<E> {
SequencedSet<E> reversed();
}
// 比較のためSequencedCollectionインタフェースを再掲
interface SequencedCollection<E> extends Collection<E> {
SequencedCollection<E> reversed();
}
共変戻り値でオーバーライド
している
© 2022 NTT DATA Corporation 19
SequencedMapインタフェース
interface SequencedMap<K,V> extends Map<K,V> {
// 新規追加メソッド
SequencedMap<K,V> reversed();
SequencedSet<K> sequencedKeySet();
SequencedCollection<V> sequencedValues();
SequencedSet<Entry<K,V>> sequencedEntrySet();
V putFirst(K, V);
V putLast(K, V);
// SortedMapとNavigableMapから昇格したメソッド
Entry<K, V> firstEntry();
Entry<K, V> lastEntry();
K firstKey();
K lastKey();
Entry<K, V> pollFirstEntry();
Entry<K, V> pollLastEntry();
}
© 2022 NTT DATA Corporation 20
Collectionsクラスへの追加メソッド
 static <T> SequencedCollection<T>
unmodifiableSequencedCollection(SequencedCollection<? extends T> c)
 static <T> SequencedSet<T>
unmodifiableSequencedSet(SequencedSet<? extends T> s)
 static <K,V> SequencedMap<K,V>
unmodifiableSequencedMap(SequencedMap<? extends K, ? extends V> m)
 戻り値の実際の型はUnmodifiableSequenced[Collection|Set|Map]となる
© 2022 NTT DATA Corporation 21
ビルドすれば実際に試せます
© 2022 NTT DATA Corporation 22
SequencedCollection#reversed()
 戻り値は降順に並び替えた新しいコレクションではない
 ReverseOrder...Viewクラスのインスタンスを返す
• ReverseOrderListView、ReverseOrderSortedSetViewなど
• 元のコレクションを内部に保持し 各操作を降順で扱う
© 2022 NTT DATA Corporation 23
SequencedCollection#reversed()
 戻り値は降順に並び替えた新しいコレクションではない
 ReverseOrder...Viewクラスのインスタンスを返す
• ReverseOrderListView、ReverseOrderSortedSetViewなど
• 元のコレクションを内部に保持し 各操作を降順で扱う
// 一部抜粋
class ReverseOrderListView<E> implements List<E> {
final List<E> base;
public E get(int i) {
return base.get(base.size() - i - 1);
}
...
}
© 2022 NTT DATA Corporation 24
SequencedCollection#reversed()
 ReverseOrder...Viewクラスのインスタンスを返す
• 元のコレクションを内部に保持し 各操作を降順で扱う
• よって 元のコレクション 降順のコレクション どちらかを変更しても
両方とも変更したコレクションとなる
// 一部抜粋
class ReverseOrderListView<E> implements List<E> {
final List<E> base;
public E get(int i) {
return base.get(base.size() - i - 1);
}
...
}
© 2022 NTT DATA Corporation 25
セッションの感想
 現状はたしかに不便 一貫性がないと気づいた
• Javaに慣れきってこうした側面が見えていない自分が見えた
© 2022 NTT DATA Corporation 26
The Sincerest Form of Flattery
[LRN1426]
© 2022 NTT DATA Corporation 27
スピーカー
 Maurice Naftalinさん
 Javaチャンピオン
 『Java Generics and Collections』(2006)の共著者
 パターンマッチの部分のみJose Paumardさん
© 2022 NTT DATA Corporation 28
セッションタイトルの謎
The Sincerest Form of Flattery
(日本語訳) もっとも誠実なお世辞
© 2022 NTT DATA Corporation 29
セッションの内容
Javaが関数型言語から学び追加した機能について
Scalaと比較しながら確認する
© 2022 NTT DATA Corporation 30
タイトルと内容がどう関連するのかわからなかった
タイトル: The Sincerest Form of Flattery
(日本語訳) もっとも誠実なお世辞
内容: Javaが関数型言語から学び追加した機能について
Scalaと比較しながら確認する
© 2022 NTT DATA Corporation 31
有名な文章の一部
“Imitation is the sincerest form of flattery that
mediocrity can pay to greatness.”
(日本語訳) 模倣は凡人が偉大さに対して送ることができる
もっとも誠実なお世辞である
― オスカー・ワイルド
© 2022 NTT DATA Corporation 32
セッションタイトルの謎解き
意地悪な視点でタイトルと内容を照合すると
凡庸な言語であるJavaによる
先を行っている言語としての関数型(Scala) の機能の
模倣についてのセッション
© 2022 NTT DATA Corporation 33
関数型言語のエレガントで数学的にも正しい機能
 高階関数
• Lisp 1958年
 パラメータ多相
• ML 1975年
 パターンマッチ
• Caml 1985年
ただし実用的と言えないところもあった
© 2022 NTT DATA Corporation 34
Pizza言語
Javaにこの3つの機能を加えたプログラミング言語
 高階関数
 パラメータ多相
 パターンマッチ
https://pizzacompiler.sourceforge.net/
© 2022 NTT DATA Corporation 35
Pizzaコードでのパラメータ多相
class StoreSomething<A> {
A something;
StoreSomething(A something) {
this.something = something;
}
A get() {
return something;
}
}
interface Set<A implements Comparable> {
boolean contains(A x);
Set<A> include(A x);
}
© 2022 NTT DATA Corporation 36
1997年ごろ
https://dl.acm.org/doi/10.1145/263699.263715
© 2022 NTT DATA Corporation 37
https://www.oreilly.com/library/view/java-generics-and/0596527756/
© 2022 NTT DATA Corporation 38
PizzaからJavaのジェネリクスへ
Pizza
(1997)
GJ: Generic
Java
(1998)
Java 5
(2004)
Scala
(2003)
https://homepages.inf.ed.ac.uk/wadler/gj/Documents/gj-tutorial.pdf
© 2022 NTT DATA Corporation 39
GJからJava 5のジェネリクスへ
 GJの時点でジェネリクスのほぼすべての機能があった
• ワイルドカードを除く
 1998年からJava 5の2004年まで
なぜ6年かかったかは不明?とのこと
• ワイルドカードの実装追加していたにせよ長い?
http://www.bracha.org/wildcards.pdf
© 2022 NTT DATA Corporation 40
ScalaとJavaでの取り組み方の違い
 高階関数
 パラメータ多相
 パターンマッチ
• Scalaはこれらの機能を一気に入れた (後方互換不要なのもある)
• Javaは1つずつ入れている (後方互換性を保ちつつ)
- 2004年にジェネリクス
- 2014年にラムダ式
- パターンマッチは追加中
© 2022 NTT DATA Corporation 41
セッション後半はそれぞれの詳細
 ジェネリクス
• erasure イレージャ
• variance(変性): 共変や反変
• Scalaの場合
 ラムダ式
• Javaで型システムを変更せずに関数を取り込むには
• Scalaの場合
 パターンマッチ
• パターンとは
• Scalaの場合
© 2022 NTT DATA Corporation 42
本セッションでは時間のため1つだけ紹介
 ジェネリクス
• erasure イレージャ
• variance(変性): 共変や反変
• Scalaの場合
 ラムダ式
• Javaで型システムを変更せずに関数を取り込むには
• Scalaの場合
 パターンマッチ
• パターンとは
• Scalaの場合
ビギナーの方向けの
内容です
© 2022 NTT DATA Corporation 43
Javaの配列は共変
// Arrays.sort(Object[] a)を考える
Integer[] a = { 1, 2, 3 };
Arrays.sort(a);
String[] b = { "Alice", "Bob", "Carol" };
Arrays.sort(b);
// Integer配列型もString配列型もObject配列型のサブタイプ
© 2022 NTT DATA Corporation 44
配列を共変にした結果
© 2022 NTT DATA Corporation 45
ジェネリクスの設計方針
 List<Integer>はList<Number>のサブタイプではない
© 2022 NTT DATA Corporation 46
ジェネリクスの設計方針
 境界型パラメータで共変サブタイピングを実現
© 2022 NTT DATA Corporation 47
ジェネリクスの設計方針
 ワイルドカードで反変サプタイピングを実現
• List<? super Number>はList<Number>のスーパータイプ
混乱した方は
Effective Java 第3版
項目31を読んでみましょう
© 2022 NTT DATA Corporation 48
Scalaの場合
 変位指定アノテーションがある
• [+A] [-A] [A]
 たとえばScalaのリストはList[+A]で共変である
abstract class Animal {
def name: String
}
case class Cat(name: String) extends Animal
case class Dog(name: String) extends Animal
val cats: List[Cat] = List(Cat("Alice"), Cat("Bob"))
val animals: List[Animal] = cats // OK
© 2022 NTT DATA Corporation 49
セッションの感想
 各機能の意味や使用方法は知っていても
歴史的経緯はあまり知らなかったので興味深かった
 ジェネリクスについて機能面には習熟していても
そのバックボーンについては知らないことが多いと気づいた
© 2022 NTT DATA Corporation
本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。

More Related Content

What's hot

より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)NTT DATA Technology & Innovation
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)NTT DATA Technology & Innovation
 
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介T. Suwa
 
Kuberneteの運用を支えるGitOps
Kuberneteの運用を支えるGitOpsKuberneteの運用を支えるGitOps
Kuberneteの運用を支えるGitOpsshunki fujiwara
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2Preferred Networks
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話Yuta Shimada
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションMasahiko Sawada
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Masahito Zembutsu
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)NTT DATA Technology & Innovation
 
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~Shinji Takao
 

What's hot (20)

より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
 
Kuberneteの運用を支えるGitOps
Kuberneteの運用を支えるGitOpsKuberneteの運用を支えるGitOps
Kuberneteの運用を支えるGitOps
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
 
Docker Tokyo
Docker TokyoDocker Tokyo
Docker Tokyo
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
 
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
 

Similar to コレクションフレームワーク関連セッション(JavaOne & Devoxx報告会 2022 発表資料)

9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...NTT DATA Technology & Innovation
 
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)NTT DATA Technology & Innovation
 
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)NTT DATA Technology & Innovation
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)NTT DATA Technology & Innovation
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)NTT DATA Technology & Innovation
 
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
Let's Start Contributing to OpenJDK from Today!(Oracle Groundbreakers APAC Vi...
Let's Start Contributing to OpenJDK from Today!(Oracle Groundbreakers APAC Vi...Let's Start Contributing to OpenJDK from Today!(Oracle Groundbreakers APAC Vi...
Let's Start Contributing to OpenJDK from Today!(Oracle Groundbreakers APAC Vi...NTT DATA Technology & Innovation
 
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例Naoya Kishimoto
 
Scala + Finagleの魅力
Scala + Finagleの魅力Scala + Finagleの魅力
Scala + Finagleの魅力Kota Mizushima
 
LL2021 Java update
LL2021 Java updateLL2021 Java update
LL2021 Java updatetorutk
 
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]オラクルエンジニア通信
 
Daisukei vsug ef
Daisukei vsug efDaisukei vsug ef
Daisukei vsug efvsug_jim
 
企業システムで使えるマイクロサービスの特長と実践 (Oracle Cloudウェビナーシリーズ: 2021年4月15日)
企業システムで使えるマイクロサービスの特長と実践 (Oracle Cloudウェビナーシリーズ: 2021年4月15日)企業システムで使えるマイクロサービスの特長と実践 (Oracle Cloudウェビナーシリーズ: 2021年4月15日)
企業システムで使えるマイクロサービスの特長と実践 (Oracle Cloudウェビナーシリーズ: 2021年4月15日)オラクルエンジニア通信
 
Introduction to Magnum (JP)
Introduction to Magnum (JP)Introduction to Magnum (JP)
Introduction to Magnum (JP)Motohiro OTSUKA
 
第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2lyrical_logical
 
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年2月版]
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年2月版]Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年2月版]
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年2月版]オラクルエンジニア通信
 
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
OpenTelemetryを用いたObservability基礎の実装 with AWS Distro for OpenTelemetry(Kuberne...
OpenTelemetryを用いたObservability基礎の実装 with AWS Distro for OpenTelemetry(Kuberne...OpenTelemetryを用いたObservability基礎の実装 with AWS Distro for OpenTelemetry(Kuberne...
OpenTelemetryを用いたObservability基礎の実装 with AWS Distro for OpenTelemetry(Kuberne...NTT DATA Technology & Innovation
 

Similar to コレクションフレームワーク関連セッション(JavaOne & Devoxx報告会 2022 発表資料) (20)

9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
 
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Let's Start Contributing to OpenJDK from Today!(Oracle Groundbreakers APAC Vi...
Let's Start Contributing to OpenJDK from Today!(Oracle Groundbreakers APAC Vi...Let's Start Contributing to OpenJDK from Today!(Oracle Groundbreakers APAC Vi...
Let's Start Contributing to OpenJDK from Today!(Oracle Groundbreakers APAC Vi...
 
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
 
Scala + Finagleの魅力
Scala + Finagleの魅力Scala + Finagleの魅力
Scala + Finagleの魅力
 
LL2021 Java update
LL2021 Java updateLL2021 Java update
LL2021 Java update
 
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]
 
WebRTC on Native App
WebRTC on Native AppWebRTC on Native App
WebRTC on Native App
 
Daisukei vsug ef
Daisukei vsug efDaisukei vsug ef
Daisukei vsug ef
 
企業システムで使えるマイクロサービスの特長と実践 (Oracle Cloudウェビナーシリーズ: 2021年4月15日)
企業システムで使えるマイクロサービスの特長と実践 (Oracle Cloudウェビナーシリーズ: 2021年4月15日)企業システムで使えるマイクロサービスの特長と実践 (Oracle Cloudウェビナーシリーズ: 2021年4月15日)
企業システムで使えるマイクロサービスの特長と実践 (Oracle Cloudウェビナーシリーズ: 2021年4月15日)
 
Introduction to Magnum (JP)
Introduction to Magnum (JP)Introduction to Magnum (JP)
Introduction to Magnum (JP)
 
第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2
 
第14回しゃちほこオラクル俱楽部
第14回しゃちほこオラクル俱楽部第14回しゃちほこオラクル俱楽部
第14回しゃちほこオラクル俱楽部
 
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年2月版]
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年2月版]Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年2月版]
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年2月版]
 
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
OpenTelemetryを用いたObservability基礎の実装 with AWS Distro for OpenTelemetry(Kuberne...
OpenTelemetryを用いたObservability基礎の実装 with AWS Distro for OpenTelemetry(Kuberne...OpenTelemetryを用いたObservability基礎の実装 with AWS Distro for OpenTelemetry(Kuberne...
OpenTelemetryを用いたObservability基礎の実装 with AWS Distro for OpenTelemetry(Kuberne...
 

More from NTT DATA Technology & Innovation

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)NTT DATA Technology & Innovation
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方NTT DATA Technology & Innovation
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...NTT DATA Technology & Innovation
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)NTT DATA Technology & Innovation
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)NTT DATA Technology & Innovation
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...NTT DATA Technology & Innovation
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...NTT DATA Technology & Innovation
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)NTT DATA Technology & Innovation
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)NTT DATA Technology & Innovation
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)NTT DATA Technology & Innovation
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...NTT DATA Technology & Innovation
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)NTT DATA Technology & Innovation
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)NTT DATA Technology & Innovation
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 

More from NTT DATA Technology & Innovation (20)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

Recently uploaded

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成Hiroshi Tomioka
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 

Recently uploaded (9)

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 

コレクションフレームワーク関連セッション(JavaOne & Devoxx報告会 2022 発表資料)

  • 1. © 2022 NTT DATA Corporation コレクションフレームワーク関連セッション JavaOne & Devoxx報告会 2022 株式会社NTTデータ 阪田 浩一 2022年11月11日 • 想定視聴者: Javaのコレクションフレームワークのクラスを使ったことがあればどなたもOK!
  • 2. © 2022 NTT DATA Corporation 2 自己紹介 • 株式会社NTTデータ 所属 • JVMがとにかく好き • JavaOne 2015から毎回参加 • Javaチャンピオン • OpenJDK Author • 通算パッチ 10数個 • Oracle ACE Pro (Java分野) Koichi Sakata 阪田 浩一 jyukutyo
  • 3. © 2022 NTT DATA Corporation 3 このセッションで話すこと  コレクションフレームワークが関係する2セッション
  • 4. © 2022 NTT DATA Corporation 4 このセッションで話すこと  コレクションフレームワークが関係する2セッション • Sequenced Collections [LRN1422] • The Sincerest Form of Flattery [LRN1426]
  • 5. © 2022 NTT DATA Corporation 5 Sequenced Collections [LRN1422]
  • 6. © 2022 NTT DATA Corporation 6 JEP 431: Sequenced Collections  https://openjdk.org/jeps/431  順序ありのコレクションを定義するインタフェースを追加する
  • 7. © 2022 NTT DATA Corporation 7 JEP 431: Sequenced Collections  https://openjdk.org/jeps/431  順序ありのコレクションを定義するインタフェースを追加する  APIを2つ追加する • コレクションの最初、最後の要素を取得する統一的なAPI • 順序を逆にする統一的なAPI
  • 8. © 2022 NTT DATA Corporation 8 JEP 431: Sequenced Collections  https://openjdk.org/jeps/431  順序ありのコレクションを定義するインタフェースを追加する  APIを2つ追加する • コレクションの最初、最後の要素を取得する統一的なAPI • 順序を逆にする統一的なAPI  このJEPはCandidateステータスのため ドラフト実装をもとにディスカッション中 • https://github.com/openjdk/jdk/pull/7387
  • 9. © 2022 NTT DATA Corporation 9 スピーカー  Stuart Marksさん  Oracle社の方  このJEP 431のオーナー  IDEでのコードを使った説明のみのためスライドはなし • 記憶に加え JEPの記述とドラフトPRのコードを元にレポートします
  • 10. © 2022 NTT DATA Corporation 10 コレクションフレームワークの課題  順序ありコレクションとしてListとDequeがあるが 共通のインタフェースはCollectionで順序なしになる  順序ありのコレクションを表すのに この2つは具体的過ぎる
  • 11. © 2022 NTT DATA Corporation 11 コレクションフレームワークの課題  順序ありコレクションとしてListとDequeがあるが 共通のインタフェースはCollectionで順序なしになる  順序ありのコレクションを表すのに この2つは具体的過ぎる  Setを例に挙げると SetとHashSetは順序なし LinkedHashSetとSortedSetは順序あり 使いづらい わかりづらい 加えてunmodifiableSet()すると順序は失われる
  • 12. © 2022 NTT DATA Corporation 12 コレクションフレームワークの課題  順序ありコレクションとしてListとDequeがあるが 共通のインタフェースはCollectionで順序なしになる  順序ありのコレクションを表すのに この2つは具体的過ぎる  Setを例に挙げると SetとHashSetは順序なし LinkedHashSetとSortedSetは順序あり 使いづらい わかりづらい 加えてunmodifiableSet()すると順序は失われる  最初と最後の要素を取得する操作に統一性がない  降順(逆順)で反復する操作に統一性がない
  • 13. © 2022 NTT DATA Corporation 13 最初と最後の要素を取得する操作に統一性がない 型 最初の要素取得 最後の要素取得 List list.get(0) list.get(list.size()- 1) Deque deque.getFirst() deque.getLast() SortedSet sortedSet.first() sortedSet.last() LinkedHashSet linkedHashSet.iterator() .next() なし
  • 14. © 2022 NTT DATA Corporation 14 降順で反復する操作に統一性がない // NavigableSetだとdescendingSet()で降順のビューを取得できる for (var e : navSet.descendingSet()) process(e); // Dequeは降順イテレータが使える for (var it = deque.descendingIterator(); it.hasNext();) { var e = it.next(); process(e); } // ListだとListIteratorを使う for (var it = list.listIterator(list.size()); it.hasPrevious();) { var e = it.previous(); process(e); } // LinkedHashSetだと他のコレクションクラスにコピーするしかない
  • 15. © 2022 NTT DATA Corporation 15 降順で反復する操作に統一性がない // NavigableSetだとdescendingSet()で降順のビューを取得できる for (var e : navSet.descendingSet()) process(e); // Dequeは降順イテレータが使える for (var it = deque.descendingIterator(); it.hasNext();) { var e = it.next(); process(e); } // ListだとListIteratorを使う for (var it = list.listIterator(list.size()); it.hasPrevious();) { var e = it.previous(); process(e); } // LinkedHashSetだと他のコレクションクラスにコピーするしかない 加えてSetが返ってくるから stream()を呼んで Stream APIを使うことも IteratorからStream取得は Spliteratorsに渡して… と手間がかかる
  • 16. © 2022 NTT DATA Corporation 16 新しいインタフェースの導入 https://openjdk.org/jeps/431
  • 17. © 2022 NTT DATA Corporation 17 SequencedCollectionインタフェース interface SequencedCollection<E> extends Collection<E> { // 新規追加メソッド SequencedCollection<E> reversed(); // Dequeから昇格したメソッド void addFirst(E); void addLast(E); E getFirst(); E getLast(); E removeFirst(); E removeLast(); } set.reversed().stream() とできる
  • 18. © 2022 NTT DATA Corporation 18 SequencedSetインタフェース interface SequencedSet<E> extends Set<E>, SequencedCollection<E> { SequencedSet<E> reversed(); } // 比較のためSequencedCollectionインタフェースを再掲 interface SequencedCollection<E> extends Collection<E> { SequencedCollection<E> reversed(); } 共変戻り値でオーバーライド している
  • 19. © 2022 NTT DATA Corporation 19 SequencedMapインタフェース interface SequencedMap<K,V> extends Map<K,V> { // 新規追加メソッド SequencedMap<K,V> reversed(); SequencedSet<K> sequencedKeySet(); SequencedCollection<V> sequencedValues(); SequencedSet<Entry<K,V>> sequencedEntrySet(); V putFirst(K, V); V putLast(K, V); // SortedMapとNavigableMapから昇格したメソッド Entry<K, V> firstEntry(); Entry<K, V> lastEntry(); K firstKey(); K lastKey(); Entry<K, V> pollFirstEntry(); Entry<K, V> pollLastEntry(); }
  • 20. © 2022 NTT DATA Corporation 20 Collectionsクラスへの追加メソッド  static <T> SequencedCollection<T> unmodifiableSequencedCollection(SequencedCollection<? extends T> c)  static <T> SequencedSet<T> unmodifiableSequencedSet(SequencedSet<? extends T> s)  static <K,V> SequencedMap<K,V> unmodifiableSequencedMap(SequencedMap<? extends K, ? extends V> m)  戻り値の実際の型はUnmodifiableSequenced[Collection|Set|Map]となる
  • 21. © 2022 NTT DATA Corporation 21 ビルドすれば実際に試せます
  • 22. © 2022 NTT DATA Corporation 22 SequencedCollection#reversed()  戻り値は降順に並び替えた新しいコレクションではない  ReverseOrder...Viewクラスのインスタンスを返す • ReverseOrderListView、ReverseOrderSortedSetViewなど • 元のコレクションを内部に保持し 各操作を降順で扱う
  • 23. © 2022 NTT DATA Corporation 23 SequencedCollection#reversed()  戻り値は降順に並び替えた新しいコレクションではない  ReverseOrder...Viewクラスのインスタンスを返す • ReverseOrderListView、ReverseOrderSortedSetViewなど • 元のコレクションを内部に保持し 各操作を降順で扱う // 一部抜粋 class ReverseOrderListView<E> implements List<E> { final List<E> base; public E get(int i) { return base.get(base.size() - i - 1); } ... }
  • 24. © 2022 NTT DATA Corporation 24 SequencedCollection#reversed()  ReverseOrder...Viewクラスのインスタンスを返す • 元のコレクションを内部に保持し 各操作を降順で扱う • よって 元のコレクション 降順のコレクション どちらかを変更しても 両方とも変更したコレクションとなる // 一部抜粋 class ReverseOrderListView<E> implements List<E> { final List<E> base; public E get(int i) { return base.get(base.size() - i - 1); } ... }
  • 25. © 2022 NTT DATA Corporation 25 セッションの感想  現状はたしかに不便 一貫性がないと気づいた • Javaに慣れきってこうした側面が見えていない自分が見えた
  • 26. © 2022 NTT DATA Corporation 26 The Sincerest Form of Flattery [LRN1426]
  • 27. © 2022 NTT DATA Corporation 27 スピーカー  Maurice Naftalinさん  Javaチャンピオン  『Java Generics and Collections』(2006)の共著者  パターンマッチの部分のみJose Paumardさん
  • 28. © 2022 NTT DATA Corporation 28 セッションタイトルの謎 The Sincerest Form of Flattery (日本語訳) もっとも誠実なお世辞
  • 29. © 2022 NTT DATA Corporation 29 セッションの内容 Javaが関数型言語から学び追加した機能について Scalaと比較しながら確認する
  • 30. © 2022 NTT DATA Corporation 30 タイトルと内容がどう関連するのかわからなかった タイトル: The Sincerest Form of Flattery (日本語訳) もっとも誠実なお世辞 内容: Javaが関数型言語から学び追加した機能について Scalaと比較しながら確認する
  • 31. © 2022 NTT DATA Corporation 31 有名な文章の一部 “Imitation is the sincerest form of flattery that mediocrity can pay to greatness.” (日本語訳) 模倣は凡人が偉大さに対して送ることができる もっとも誠実なお世辞である ― オスカー・ワイルド
  • 32. © 2022 NTT DATA Corporation 32 セッションタイトルの謎解き 意地悪な視点でタイトルと内容を照合すると 凡庸な言語であるJavaによる 先を行っている言語としての関数型(Scala) の機能の 模倣についてのセッション
  • 33. © 2022 NTT DATA Corporation 33 関数型言語のエレガントで数学的にも正しい機能  高階関数 • Lisp 1958年  パラメータ多相 • ML 1975年  パターンマッチ • Caml 1985年 ただし実用的と言えないところもあった
  • 34. © 2022 NTT DATA Corporation 34 Pizza言語 Javaにこの3つの機能を加えたプログラミング言語  高階関数  パラメータ多相  パターンマッチ https://pizzacompiler.sourceforge.net/
  • 35. © 2022 NTT DATA Corporation 35 Pizzaコードでのパラメータ多相 class StoreSomething<A> { A something; StoreSomething(A something) { this.something = something; } A get() { return something; } } interface Set<A implements Comparable> { boolean contains(A x); Set<A> include(A x); }
  • 36. © 2022 NTT DATA Corporation 36 1997年ごろ https://dl.acm.org/doi/10.1145/263699.263715
  • 37. © 2022 NTT DATA Corporation 37 https://www.oreilly.com/library/view/java-generics-and/0596527756/
  • 38. © 2022 NTT DATA Corporation 38 PizzaからJavaのジェネリクスへ Pizza (1997) GJ: Generic Java (1998) Java 5 (2004) Scala (2003) https://homepages.inf.ed.ac.uk/wadler/gj/Documents/gj-tutorial.pdf
  • 39. © 2022 NTT DATA Corporation 39 GJからJava 5のジェネリクスへ  GJの時点でジェネリクスのほぼすべての機能があった • ワイルドカードを除く  1998年からJava 5の2004年まで なぜ6年かかったかは不明?とのこと • ワイルドカードの実装追加していたにせよ長い? http://www.bracha.org/wildcards.pdf
  • 40. © 2022 NTT DATA Corporation 40 ScalaとJavaでの取り組み方の違い  高階関数  パラメータ多相  パターンマッチ • Scalaはこれらの機能を一気に入れた (後方互換不要なのもある) • Javaは1つずつ入れている (後方互換性を保ちつつ) - 2004年にジェネリクス - 2014年にラムダ式 - パターンマッチは追加中
  • 41. © 2022 NTT DATA Corporation 41 セッション後半はそれぞれの詳細  ジェネリクス • erasure イレージャ • variance(変性): 共変や反変 • Scalaの場合  ラムダ式 • Javaで型システムを変更せずに関数を取り込むには • Scalaの場合  パターンマッチ • パターンとは • Scalaの場合
  • 42. © 2022 NTT DATA Corporation 42 本セッションでは時間のため1つだけ紹介  ジェネリクス • erasure イレージャ • variance(変性): 共変や反変 • Scalaの場合  ラムダ式 • Javaで型システムを変更せずに関数を取り込むには • Scalaの場合  パターンマッチ • パターンとは • Scalaの場合 ビギナーの方向けの 内容です
  • 43. © 2022 NTT DATA Corporation 43 Javaの配列は共変 // Arrays.sort(Object[] a)を考える Integer[] a = { 1, 2, 3 }; Arrays.sort(a); String[] b = { "Alice", "Bob", "Carol" }; Arrays.sort(b); // Integer配列型もString配列型もObject配列型のサブタイプ
  • 44. © 2022 NTT DATA Corporation 44 配列を共変にした結果
  • 45. © 2022 NTT DATA Corporation 45 ジェネリクスの設計方針  List<Integer>はList<Number>のサブタイプではない
  • 46. © 2022 NTT DATA Corporation 46 ジェネリクスの設計方針  境界型パラメータで共変サブタイピングを実現
  • 47. © 2022 NTT DATA Corporation 47 ジェネリクスの設計方針  ワイルドカードで反変サプタイピングを実現 • List<? super Number>はList<Number>のスーパータイプ 混乱した方は Effective Java 第3版 項目31を読んでみましょう
  • 48. © 2022 NTT DATA Corporation 48 Scalaの場合  変位指定アノテーションがある • [+A] [-A] [A]  たとえばScalaのリストはList[+A]で共変である abstract class Animal { def name: String } case class Cat(name: String) extends Animal case class Dog(name: String) extends Animal val cats: List[Cat] = List(Cat("Alice"), Cat("Bob")) val animals: List[Animal] = cats // OK
  • 49. © 2022 NTT DATA Corporation 49 セッションの感想  各機能の意味や使用方法は知っていても 歴史的経緯はあまり知らなかったので興味深かった  ジェネリクスについて機能面には習熟していても そのバックボーンについては知らないことが多いと気づいた
  • 50. © 2022 NTT DATA Corporation 本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。