SlideShare a Scribd company logo
1 of 131
Download to read offline
Collections
Framework
JJUG CCC 2019 spring C1
2019-05-18
#ccc_c1
•
• twitter: @mike_neck
• github : mike-neck
• L is B direct
(Java/Golang)
• Java
( )
• Java
•
• Queue
• Dequeue
• Optional …
•
•
•
• Collections Framework
• API
•
•
Collections
Framework
Java
• Java
Java
java.lang.String
int
com.app.Course
•
Java
java.uti.Set<com.app. >
•
Coffee[] coffees = new Coffee[];
(1)
•
•
•
(Effective Java 3rd ed No.59)
•
String[] array = …
String[] current = array;
String[] array = new String[current.length + 1];
System.arraycopy(current, 0, array, 0, current.length);
array[current.length] = "foo";
List<E>
List<String> list = …
list.add("foo");
(2)
•
• Java
•
Coffee
CaffeMocha
Coffee[]
CaffeMocha[]
Java CaffeMocha Coffee
CaffeMocha Coffee
Coffee
CaffeMocha
Coffee[]
CaffeMocha[]
Java CaffeMocha
Coffee
Coffee
CaffeMocha
Coffee[]
CaffeMocha[]
CaffeMocha[] CaffeMocha
CaffeMocha
( Coffee )
CaffeMocha[] caffeMochaArray = new CaffeMocha[1];
Coffee[] coffeeArray = caffeMochaArray;
coffeeArray[0] = new American(); // ArrayStoreException
Coffee Coffee
American
List<E>
(Java 5 )
Coffee
CaffeMocha
List<Coffee>
List<CaffeMocha>
List<Coffee> List<CaffeMocha>
List<CaffeMocha> caffeMochaList = new ArrayList<>();
List<Coffee> coffeeList = caffeMochaList; // compile error
List<Coffee> List<CaffeMocha>
List<Coffee>
List<CaffeMocha>
Collections Framework
•
• Java
• Collections Framework
• Collections Framework
API
• API
•
Iterable<T>
Collection<E>
List<E> Set<E> Map<K,V>
SortedSet<E> SortedMap<K,V>
Set<E>
• ( )
• ( )
SortedSet<E>
•
• ( )
List<E>
• (
)
•
0 1 2 3 4 5
Map<K,V>
• K (Set) V
• ( -> )
350JPY
550JPY
450JPY
350JPY
Collection<E>
• ( )
• / / / /
•
•
• ( )
•
•
•
UnsupportedOperationException
( )
!
Iterable<T>
Iterable<T>
Collection<E>
List<E> Set<E> Map<K,V>
Iterable<E>
• Iterator<E> iterator()
• Iterator<E> ( )
Iterable<String> iterable = ...;
Iterator<String> iterator = iterable.iterator();
while(iterator.hasNext()) {
String string = iterator.next();
System.out.println(string);
}
Iterable<E> (1)
• Iterable<E> for
Iterable<String> iterable = ...;
for(String item : iterable) {
• forEach(Consumer<? extends E>)
Iterable<E> (2)
Iterable<String> iterable = ...;
iterable.forEach(string -> System.out.println(string));
Collection<E>
Iterable<E>
Collection<E>
List<E> Set<E> Map<K,V>
Collection<E>
•
• boolean isEmpty()
• int size()
•
• boolean contains(Object)
• boolean
containsAll(Collection<?>)
• /
• E[] toArray(E[])
• Stream<E> stream()
•
• boolean add(E)
• boolean addAll(Collection<E>)
•
• boolean remove(E)
• true
• boolean removeAll(Collection<?>)
• boolean retainAll(Collection<?>)
• boolean removeIf(Predicate<? super E>)
• 1 true
•
• void clear()
!
!
Collection<E>
• ID
Collection<E>
public Collection<CoffeeSale> findCoffeeSales(
Instant date, Collection<CoffeeId> coffeeIds) {
// cofeeIds 0 return
if (coffeeIds.isEmpty()) {
return Collections.emptyList();
}
//
}
removeAll(Collection)
collection.removeAll(parameter);
collection parametercollection
retainAll(Collection)
collection.retainAll(parameter);
parametercollection
Set<E>
Iterable<E>
Collection<E>
List<E> Set<E> Map<K,V>
SortedSet<E> SortedMap<K,V>
Collection<E>
Collection<E>
( ) Set<E>
List<E>
Iterable<E>
Collection<E>
List<E> Set<E> Map<K,V>
List<E>
•
• E get(int)
•
• int indexOf(Object)
• int lastIndexOf(Object)
• List
• List<E> subList(int, int)
• ( )
• void add(int, E)
• void addAll(int,
Collection<E>)
•
• void set(int, E)
• void
replaceAll(UnrayOperator<E>
)
•
• void sort(Comparator<E>)
•
• E remove(int)
!
!
List#remove(int)
List<Integer> list = new ArrayList<>(
List.of(1, 2, 3, 4, 5));
// remove(int)? remove(E)?
list.remove(1);
!
Map<K,V>
Iterable<E>
Collection<E>
List<E> Set<E> Map<K,V>
Map<K,V>
•
• V get(K)
• V getOrDefault(K,V)
•
• boolean
containsKey(Object)
• boolean
containsValue(Object)
•
• int size()
• boolean isEmpty()
• /
• Set<K> keySet()
• Collection<V> values()
• Set<Map.Entry<K,V>>
entrySet()
• void forEach(BiConsumer<?
super K, ? super T>)
Map<K,V>
get
•
Map<CoffeeName, CoffeeProduct> coffees;
CoffeeProduct findProduct(CoffeeName name) {
return coffees.get(name);
}
CoffeeProduct product = coffeeRepository
.findProduct(coffeeName(" "));
Order newOrder = product.createNewOrder(1); // NullPointerException
Map<K,V>
get
• Optional<T>
Map<CoffeeName, CoffeeProduct> coffees;
Optional<CoffeeProduct> findProduct(CoffeeName name) {
return Optional.ofNullable(coffees.get(name));
}
Optional<CoffeeProduct> product = coffeeRepository
.findProduct(coffeeName(" "));
Optional<Order> newOrder = product.map(p -> p.createNewOrder(1));
Map<K,V>
• Java8
• V put(K, V)
• void putAll(Map<? extends
K, ? extends V>)
• Java 8
• V putIfAbsent(K, V)
• V compute(K, BiFunction<?
super K, ? super V, ? extends
V>)
• V computeIfAbsent(K,
Function<? super K, ? extends
V>)
!
• Java 8
• V replace(K, V)
• boolean replace(K, V, V)
• void replaceAll(BiFunction<?
super K, ? super V, ?
extends V>)
• V computeIfPresent(K,
Function<? super K, ?
extends V>)
• V merge(K, V, BiFunction<?
super V, ? super V, ?
extends V>)
put(K,V)
put(K,V)
putIfAbsent(K,V) replace(K,V)
put(K,V)
putIfAbsent/replace
compute
•
• Stream
(10 ) DrinkProduct
DrinkName
DrinkCategory
Price
Map<DrinkCategory,List<DrinkProduct>> groupByCategory(
List<DrinkProduct> list) {
Map<DrinkCategory,List<DrinkProduct>> map = new HashMap<>();
for(DrinkProduct product: list) {
if(!map.containsKey(product.category)) {
map.put(product.category, new ArrayList<>());
}
map.get(product.category).add(product);
}
return Collections.unmodifiableMap(map);
}
Map<DrinkCategory,List<DrinkProduct>> groupByCategory(
List<DrinkProduct> list) {
Map<DrinkCategory,List<DrinkProduct>> map = new HashMap<>();
for(DrinkProduct product: list) {
map.computeIfAbsent(product.category, k -> new ArrayList<>())
.add(product);
}
return Collections.unmodifiableMap(map);
}
Map<K,V>
•
• V remove(Object)
• boolean remove(Object, Object)
•
• void clear()
!
•
• (Set/List/Map)
•
UnsupportedOperationException
List<E>
• … add/remove/sort
• ArrayList<E> -
List<E>
• LinkedList<E> -
List<E>
ArrayList<E> vs
LinkedList<E>
• pros
• ArrayList<E> -
• LinkedList<E> - /
• cons
• ArrayList<E> -
• LinkedList<E> -
LinkedList Queue
Dequeue(Stack)
ArrayList LinkedList
ArrayList
List<E>
• … add/remove/sort
UnsupportedOperationException
•
• List.of(E…)
• List.copyOf(Collection<? extends E>)
• Arrays.asList(E…)
• Collections.emptyList()
• Collections.singletonList(E)
• Collections.unmodifiableList(List<? extends E>)
Set<E>/SortedSet<E>
• … add/remove
• HashSet<E> - hashCode
Set<E>
• HashMap<E, Object>
• LinkedHashSet<E> - HashSet<E> ( )
Set<E>
• LinkedHashMap<E, Object>
• TreeSet<E> - SortedSet<E> /Comparator<E>
• TreeMap<E, Object>
Set<Coffee>
Set<E> Map<K,V>
Set<Price>
350 JPY
450 JPY
550 JPY
Set<Coffee>
Set<E> Map<K,V>
Set<Price>
350 JPY
450 JPY
550 JPY
Collection<Price>
IdentifiedBy<Coffee>
Set<E> Map<K,V>
350 JPY
350 JPY
450 JPY
550 JPY
Map<Coffee,Price>
Set<E> Map<K,V>
350 JPY
350 JPY
450 JPY
550 JPY
Set<E>
• … add/remove/sort
UnsupportedOperationException
•
• Set.of(E…)
• Set.copyOf(Collection<? extends E>)
• Collections.emptySet()
• Collections.singleton(E)
• Collections.unmodifiableSet(List<? extends E>)
Map<K,V>
• … put/remove
• HashMap<K,V> - hashCode
Map<K,V>
• LinkedHashMap<K,V> - HashMap<K,V>
( )
Map<K,V>
• TreeMap<K,V> - SortedMap<K,V>
HashMap<K,V>
Map<ProductId, DrinkProduct> toMap(SortedSet<DrinkProduct> set) {
Map<ProductId, DrinkProduct> map = new HashMap<>();
for(DrinkProduct product: set) {
map.put(product.id, product);
}
return Collections.unmodifiableMap(map);
}
Map<ProductId, DrinkProduct> map = toMap(products);
map.forEach((id, product) -> System.out.println(id));
HashMap<K,V>
Map<ProductId, DrinkProduct> toMap(SortedSet<DrinkProduct> set) {
Map<ProductId, DrinkProduct> map = new LinkedHashMap<>();
for(DrinkProduct product: set) {
map.put(product.id, product);
}
return Collections.unmodifiableMap(map);
}
Map<ProductId, DrinkProduct> map = toMap(products);
map.forEach((id, product) -> System.out.println(id));
LinkedHashMap<K,V>
Map<K,V>
• … put/remove/compute
UnsupportedOperationException
•
• Map.of(K,V)
• Map.copyOf(Map<? extends K,? extends V>)
• Collections.emptyMap()
• Collections.singletonMap(K,V)
• Collections.unmodifiableMap(Map<? extends K,?
extends V>)
•
•
6
6
•
• equals/hashCode
• ( )
• (
)
• null
• null
• Map<String, ?>
I. equals/hashCode
• equals
contains(containsKey)
• Set<E> add
• HashSet hashCode
hashCode
equals
• : x.equals(x) true (x ≠ null)
• : x.equals(y) true y.equals(x) true
(x ≠ null, y ≠ null)
• : x.equals(y) true y.equals(z) true
z.equals(x) true (x ≠ null, y ≠ null, z ≠ null)
• : x.equals(y)
• x.equals(null) false (x ≠ null)
• equals NullPointerException
hashCode
• equals hashCode
• x.equals(y) true x.hashCode()
y.hashCode()
• hashCode()
• x.equals(y) false x y hashCode()
equals/hashCode
•
• IDE
•
• Lombok
•
• google/auto AutoValue
• IDE
II.
• Java 1.4 Java 5
•
List<String> List
void unsafeAdd(List list, Object o) {
list.add(o);
}
List<String> list = new ArrayList<>(List.of("foo"));
unsafeAdd(list, 100L);
for(String string : list) { // ClassCastException
String.out.println(string);
}
!
<E, F extends E> void unsafeAdd(List<? super E> list, F o) {
list.add(o);
}
List<String> list = new ArrayList<>(List.of("foo"));
unsafeAdd(list, 100L); // compile error
III.
• List<E>
(ArrayList<E>/LinkedList<E>)
(List.of()/Arrays.asList())
• Collections Framework
(add/remove/clear)
void addSomeEntry(List<String> list) {
list.add("bar"); // UnsupportedOperationException
}
List<String> list = List.of("foo");
unsafeAdd(list);
!
•
UnsupportedOperationException
•
• ( )
• ArrayList<E>/
LinkedList<E>
•
List<String> someEntry() {
return List.of("bar"); //
}
List<String> list = new ArrayList<>(List.of(“foo"));
list.addAll(someEntry());
IV. null
• null
• ArrayList<E>/LinkedList<E>/Arrays.asList()/
HashSet<E>/HashMap<K,V>
• null
• List.of()/Set.of()/Map.of() /
TreeSet<E>/TreeMap<E>
• API
null
List<String> someEntry() {
List<String> list = new ArrayList<>();
list.add(null);
list.add("foo");
return list;
}
List<String> list = new ArrayList<>(List.of(“bar"));
list.addAll(someEntry());
return List.copyOf(list)); // NullPointerException
!
null
: null add
( )
List<String> someEntry() {
List<String> list = new ArrayList<>();
list.add("foo");
return list;
}
List<String> list = new ArrayList<>(List.of("bar"));
list.addAll(someEntry());
return List.copyOf(list));
null
: ArrayList
findbugs/spotbugs
class ListBuilder<E>{
final List<E> list = new ListBuilder<>();
final add(@Nonnull E e) {
list.add(e);
}
}
List<String> someEntry() {
ListBuilder<String> listBuilder = new ListBuilder<>();
listBuilder.add("foo");
return listBuilder.getList();
}
V.
null
• IV
•
null
List<String> someEntries(Key key) {
return map.get(key);
}
List<String> list = someEntries();
return list.size(); // NullPointerException
!
null
List<String> someEntries(Key key) {
return map.getOrDefault(key, Collections.emptyList());
}
List<String> list = someEntries();
return list.size(); // 0
VI.
Map<String,Object>
• Map<String,Object>
• Map<String,Object>
•
Map<String,Object>
PUT /users/1234
{“type":"image",
"file":"https://example.com/files/123"}
PUT /users/1234
{"type":"fields",
"name":" ",
"color":"#009933"}
Map<String,Object>
void updateProfile(UserId userId, Map<String,Object> newProfile) {
if(newProfile.get("type") != null &&
newProfile.get("type").equals("image")) {
String file = (String) newProfile.get("file");
if(file == null) {
throw new IllegalArgumentException("invalid parameter");
}
updateProfileImage(userId, newProfile);
} else if(newProfile.get("type") != null &&
newProfile.get(“type").equals("fields")) {
String name = (String) newProfile.get("name");
String color = (String) newProfile.get("color");
String url = (String) newProfile.get("url");
updateNameAndColor(userId, name, color, url);
!
Map<String,Object>
void updateProfileImage(UserId userId, NewProfileImage newProfileImage) {
if(newProfileImage.notHavingImageUrl()) {
throw new IllegalArgumentException("invalid parameter");
}
Optional<ProfileImageUrl> currentUrl = imageRepository.findProfileImageUrl(userId);
if(currentUrl.filter(url -> url.sameUrl(newProfileImage)).isPresent()) {
imageRepository.update(newProfileImage);
}
}
void updateProfileImage(UserId userId, NewProfileFields newProfileFields) {
if(newProfileFields.satisfiesCondition(satisfiesCondition())) {
throw new IllegalArgumentException("invalid parameter");
}
profileRepository.update(newProfileFields);
}
…
•
Acroquest Technology Java (
2017 )
• Joshua Bloch Effective Java 3
( 2018 )
• (Web) Dan Becker, HOW-TO Get started with the
Java Collections Framework(JAVA WORLD FROM IDG,
1998, https://www.javaworld.com/article/2076800/
get-started-with-the-java-collections-
framework.html)
1. ArrayList
ArrayList<E>
(Object[])
add(int, E)
ArrayList<E>
ArrayList<E>
ArrayList<E>
2. LinkedList
LinkedList<E>
previous
next
previous
next
previous
next
first last
Node<E>
LinkedList Node<E>
LinkedList<E>
previous
next
previous
next
previous
next
add(int, E)
LinkedList<E>
previous
next
previous
next
previous
next
Node<E>
previous
next
LinkedList<E>
previous
next
previous
next
previous
next
(next/previous)
previous
next
3. ArrayList vs
LinkedList
ArrayList vs LinkedList
add(E) - throughput/ms
ArrayList
LinkedList
JDK: oracle openjdk 12.0.1 / OS: Amazon Linux2 /
: m5a.large / : Xmx256M,Xms256M
ArrayList vs LinkedList
add(0,E) - throughput/ms
ArrayList
LinkedList
JDK: oracle openjdk 12.0.1 / OS: Amazon Linux2 /
: m5a.large / : Xmx256M,Xms256M
ArrayList vs LinkedList
get(int) - throughput/ms
ArrayList
LinkedList
JDK: oracle openjdk 12.0.1 / OS: Amazon Linux2 /
: m5a.large / : Xmx256M,Xms256M
ArrayList vs LinkedList
forEach(Consumer) - throughput/ms
ArrayList
LinkedList
JDK: oracle openjdk 12.0.1 / OS: Amazon Linux2 /
: m5a.large / : Xmx256M,Xms256M
4. HashMap
HashMap<E>
Node
K key
int hash/K key/V value Node
int hash
V value
next
HashMap<E>
Node (Node[])
length
HashMap<E>
Node index Node hash
mod
Node
hash
length
index
HashMap<E>
index LinkedList
next next
HashMap<E>
index LinkedList
next next
LinkedList
HashMap<E>
LinkedList
hashCode
B
R
left
right
R
5. TreeMap
TreeMap<K,V>
• TreeMap<K,V>
•
•
• K key V value
•
•
• ( )
TreeMap<K,V>
•
• ( )
•
•
•
•
TreeMap<K,V>
74
3
key:
value:
4
key:4 key:7
4 7
TreeMap<K,V>
7
3
key:
value:
4
key:3 key:7
key:3 key:4
3
TreeMap<K,V>
7
key:
value:
4
3
TreeMap<K,V>
7
4
3
← (4)
4
73

More Related Content

What's hot

Appengine Java Night #2b
Appengine Java Night #2bAppengine Java Night #2b
Appengine Java Night #2b
Shinichi Ogawa
 
Appengine Java Night #2a
Appengine Java Night #2aAppengine Java Night #2a
Appengine Java Night #2a
Shinichi Ogawa
 
Reactive Feature Generation with Spark and MLlib by Jeffrey Smith (1)
Reactive Feature Generation with Spark and MLlib by Jeffrey Smith (1)Reactive Feature Generation with Spark and MLlib by Jeffrey Smith (1)
Reactive Feature Generation with Spark and MLlib by Jeffrey Smith (1)
Spark Summit
 
Gareth hayes. non alphanumeric javascript-php and shared fuzzing
Gareth hayes. non alphanumeric javascript-php and shared fuzzingGareth hayes. non alphanumeric javascript-php and shared fuzzing
Gareth hayes. non alphanumeric javascript-php and shared fuzzing
Yury Chemerkin
 

What's hot (20)

Beyond Scala Lens
Beyond Scala LensBeyond Scala Lens
Beyond Scala Lens
 
Kotlin decoration - February Berlin Kotlin Meetup
Kotlin decoration - February Berlin Kotlin MeetupKotlin decoration - February Berlin Kotlin Meetup
Kotlin decoration - February Berlin Kotlin Meetup
 
Epic South Disasters
Epic South DisastersEpic South Disasters
Epic South Disasters
 
Swift Study #2
Swift Study #2Swift Study #2
Swift Study #2
 
The Ring programming language version 1.9 book - Part 54 of 210
The Ring programming language version 1.9 book - Part 54 of 210The Ring programming language version 1.9 book - Part 54 of 210
The Ring programming language version 1.9 book - Part 54 of 210
 
SCALA - Functional domain
SCALA -  Functional domainSCALA -  Functional domain
SCALA - Functional domain
 
Tweaking the interactive grid
Tweaking the interactive gridTweaking the interactive grid
Tweaking the interactive grid
 
Map Reduce: Which Way To Go?
Map Reduce: Which Way To Go?Map Reduce: Which Way To Go?
Map Reduce: Which Way To Go?
 
Appengine Java Night #2b
Appengine Java Night #2bAppengine Java Night #2b
Appengine Java Night #2b
 
Appengine Java Night #2a
Appengine Java Night #2aAppengine Java Night #2a
Appengine Java Night #2a
 
ReactでGraphQLを使っている
ReactでGraphQLを使っているReactでGraphQLを使っている
ReactでGraphQLを使っている
 
Functional programming in scala
Functional programming in scalaFunctional programming in scala
Functional programming in scala
 
Data Structures in javaScript 2015
Data Structures in javaScript 2015Data Structures in javaScript 2015
Data Structures in javaScript 2015
 
Creating New Streams: Presented by Dennis Gove, Bloomberg LP
Creating New Streams: Presented by Dennis Gove, Bloomberg LPCreating New Streams: Presented by Dennis Gove, Bloomberg LP
Creating New Streams: Presented by Dennis Gove, Bloomberg LP
 
Using JSON with MariaDB and MySQL
Using JSON with MariaDB and MySQLUsing JSON with MariaDB and MySQL
Using JSON with MariaDB and MySQL
 
The Ring programming language version 1.5.1 book - Part 43 of 180
The Ring programming language version 1.5.1 book - Part 43 of 180The Ring programming language version 1.5.1 book - Part 43 of 180
The Ring programming language version 1.5.1 book - Part 43 of 180
 
My Top 5 APEX JavaScript API's
My Top 5 APEX JavaScript API'sMy Top 5 APEX JavaScript API's
My Top 5 APEX JavaScript API's
 
React-Native Rendering Performance
React-Native Rendering PerformanceReact-Native Rendering Performance
React-Native Rendering Performance
 
Reactive Feature Generation with Spark and MLlib by Jeffrey Smith (1)
Reactive Feature Generation with Spark and MLlib by Jeffrey Smith (1)Reactive Feature Generation with Spark and MLlib by Jeffrey Smith (1)
Reactive Feature Generation with Spark and MLlib by Jeffrey Smith (1)
 
Gareth hayes. non alphanumeric javascript-php and shared fuzzing
Gareth hayes. non alphanumeric javascript-php and shared fuzzingGareth hayes. non alphanumeric javascript-php and shared fuzzing
Gareth hayes. non alphanumeric javascript-php and shared fuzzing
 

Similar to jjug-ccc 2019 Spring 発表資料 Collections Framework 入門 #jjug #jjug_ccc #ccc_c1

Useful javascript
Useful javascriptUseful javascript
Useful javascript
Lei Kang
 
CON5423-GS-Collections-and-Java-8-Functional-Fluent-Friendly-and-Fun.pptx
CON5423-GS-Collections-and-Java-8-Functional-Fluent-Friendly-and-Fun.pptxCON5423-GS-Collections-and-Java-8-Functional-Fluent-Friendly-and-Fun.pptx
CON5423-GS-Collections-and-Java-8-Functional-Fluent-Friendly-and-Fun.pptx
skypy045
 
楽々Scalaプログラミング
楽々Scalaプログラミング楽々Scalaプログラミング
楽々Scalaプログラミング
Tomoharu ASAMI
 
第49回Php勉強会@関東 Datasource
第49回Php勉強会@関東 Datasource第49回Php勉強会@関東 Datasource
第49回Php勉強会@関東 Datasource
Kaz Watanabe
 

Similar to jjug-ccc 2019 Spring 発表資料 Collections Framework 入門 #jjug #jjug_ccc #ccc_c1 (20)

Collections Framework Beginners Guide 2
Collections Framework Beginners Guide 2Collections Framework Beginners Guide 2
Collections Framework Beginners Guide 2
 
Collections Framework Begineers guide 2
Collections Framework Begineers guide 2Collections Framework Begineers guide 2
Collections Framework Begineers guide 2
 
Swift, functional programming, and the future of Objective-C
Swift, functional programming, and the future of Objective-CSwift, functional programming, and the future of Objective-C
Swift, functional programming, and the future of Objective-C
 
Will it Blend? - ScalaSyd February 2015
Will it Blend? - ScalaSyd February 2015Will it Blend? - ScalaSyd February 2015
Will it Blend? - ScalaSyd February 2015
 
Collections
CollectionsCollections
Collections
 
Kpi driven-java-development
Kpi driven-java-developmentKpi driven-java-development
Kpi driven-java-development
 
Collections in Java
Collections in JavaCollections in Java
Collections in Java
 
Patterns for slick database applications
Patterns for slick database applicationsPatterns for slick database applications
Patterns for slick database applications
 
Collections
CollectionsCollections
Collections
 
Useful javascript
Useful javascriptUseful javascript
Useful javascript
 
Happy Go Programming
Happy Go ProgrammingHappy Go Programming
Happy Go Programming
 
Alasql JavaScript SQL Database Library: User Manual
Alasql JavaScript SQL Database Library: User ManualAlasql JavaScript SQL Database Library: User Manual
Alasql JavaScript SQL Database Library: User Manual
 
Command Liner with Scala
Command Liner with ScalaCommand Liner with Scala
Command Liner with Scala
 
An overview of Python 2.7
An overview of Python 2.7An overview of Python 2.7
An overview of Python 2.7
 
A tour of Python
A tour of PythonA tour of Python
A tour of Python
 
DB API Usage - How to write DBAL compliant code
DB API Usage - How to write DBAL compliant codeDB API Usage - How to write DBAL compliant code
DB API Usage - How to write DBAL compliant code
 
Best core & advanced java classes in mumbai
Best core & advanced java classes in mumbaiBest core & advanced java classes in mumbai
Best core & advanced java classes in mumbai
 
CON5423-GS-Collections-and-Java-8-Functional-Fluent-Friendly-and-Fun.pptx
CON5423-GS-Collections-and-Java-8-Functional-Fluent-Friendly-and-Fun.pptxCON5423-GS-Collections-and-Java-8-Functional-Fluent-Friendly-and-Fun.pptx
CON5423-GS-Collections-and-Java-8-Functional-Fluent-Friendly-and-Fun.pptx
 
楽々Scalaプログラミング
楽々Scalaプログラミング楽々Scalaプログラミング
楽々Scalaプログラミング
 
第49回Php勉強会@関東 Datasource
第49回Php勉強会@関東 Datasource第49回Php勉強会@関東 Datasource
第49回Php勉強会@関東 Datasource
 

More from Shinya Mochida

gradle2.4のルールベースモデルコンフィギュレーション
gradle2.4のルールベースモデルコンフィギュレーションgradle2.4のルールベースモデルコンフィギュレーション
gradle2.4のルールベースモデルコンフィギュレーション
Shinya Mochida
 
Intelli j vs-eclipse-by-mike-neck #jbugj
Intelli j vs-eclipse-by-mike-neck #jbugjIntelli j vs-eclipse-by-mike-neck #jbugj
Intelli j vs-eclipse-by-mike-neck #jbugj
Shinya Mochida
 

More from Shinya Mochida (20)

サーバーサイド Kotlin のテストフレームワーク事情
サーバーサイド Kotlin のテストフレームワーク事情サーバーサイド Kotlin のテストフレームワーク事情
サーバーサイド Kotlin のテストフレームワーク事情
 
IntelliJ IDEA を完全にマスターする話
IntelliJ IDEA を完全にマスターする話IntelliJ IDEA を完全にマスターする話
IntelliJ IDEA を完全にマスターする話
 
クリーンアーキテクチャーを強制する方法を考えてみた(N番煎じ) #すえなみチャンス暑気払い
クリーンアーキテクチャーを強制する方法を考えてみた(N番煎じ) #すえなみチャンス暑気払いクリーンアーキテクチャーを強制する方法を考えてみた(N番煎じ) #すえなみチャンス暑気払い
クリーンアーキテクチャーを強制する方法を考えてみた(N番煎じ) #すえなみチャンス暑気払い
 
swift-log について
swift-log についてswift-log について
swift-log について
 
Vim 入門
Vim 入門Vim 入門
Vim 入門
 
Java プログラマーのための Swift 入門 #中央線Meetup
Java プログラマーのための Swift 入門 #中央線MeetupJava プログラマーのための Swift 入門 #中央線Meetup
Java プログラマーのための Swift 入門 #中央線Meetup
 
swift-nio のアーキテクチャーと RxHttpClient
swift-nio のアーキテクチャーと RxHttpClientswift-nio のアーキテクチャーと RxHttpClient
swift-nio のアーキテクチャーと RxHttpClient
 
JJUG CCC 2018 Spring - I-7 (俺が)はじめての Netty
JJUG CCC 2018 Spring - I-7 (俺が)はじめての NettyJJUG CCC 2018 Spring - I-7 (俺が)はじめての Netty
JJUG CCC 2018 Spring - I-7 (俺が)はじめての Netty
 
JJUG CCC 2018 Spring LT Spring Boot アプリケーションの起動を速くする 108 の Tips #jjug_ccc #jjug
JJUG CCC 2018 Spring LT Spring Boot アプリケーションの起動を速くする 108 の Tips #jjug_ccc #jjugJJUG CCC 2018 Spring LT Spring Boot アプリケーションの起動を速くする 108 の Tips #jjug_ccc #jjug
JJUG CCC 2018 Spring LT Spring Boot アプリケーションの起動を速くする 108 の Tips #jjug_ccc #jjug
 
Spring Boot アプリケーションの起動をほんの少し気持ちだけ速くしてみた
Spring Boot アプリケーションの起動をほんの少し気持ちだけ速くしてみたSpring Boot アプリケーションの起動をほんの少し気持ちだけ速くしてみた
Spring Boot アプリケーションの起動をほんの少し気持ちだけ速くしてみた
 
Javaモジュールシステム雑なまとめ
Javaモジュールシステム雑なまとめJavaモジュールシステム雑なまとめ
Javaモジュールシステム雑なまとめ
 
Kotlin as an AltJS
Kotlin as an AltJSKotlin as an AltJS
Kotlin as an AltJS
 
JavaのStreamで学ぶ遅延処理実装パターン
JavaのStreamで学ぶ遅延処理実装パターンJavaのStreamで学ぶ遅延処理実装パターン
JavaのStreamで学ぶ遅延処理実装パターン
 
gradle2.4のルールベースモデルコンフィギュレーション
gradle2.4のルールベースモデルコンフィギュレーションgradle2.4のルールベースモデルコンフィギュレーション
gradle2.4のルールベースモデルコンフィギュレーション
 
On stream-lazy-computation
On stream-lazy-computationOn stream-lazy-computation
On stream-lazy-computation
 
Stream脳の作り方
Stream脳の作り方Stream脳の作り方
Stream脳の作り方
 
Java8のstreamをダラダラまとめてみる
Java8のstreamをダラダラまとめてみるJava8のstreamをダラダラまとめてみる
Java8のstreamをダラダラまとめてみる
 
ドラクエの金銭感覚
ドラクエの金銭感覚ドラクエの金銭感覚
ドラクエの金銭感覚
 
30億のデバイスで走るjavaを支えるjavaエコシステム
30億のデバイスで走るjavaを支えるjavaエコシステム30億のデバイスで走るjavaを支えるjavaエコシステム
30億のデバイスで走るjavaを支えるjavaエコシステム
 
Intelli j vs-eclipse-by-mike-neck #jbugj
Intelli j vs-eclipse-by-mike-neck #jbugjIntelli j vs-eclipse-by-mike-neck #jbugj
Intelli j vs-eclipse-by-mike-neck #jbugj
 

Recently uploaded

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Recently uploaded (20)

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 

jjug-ccc 2019 Spring 発表資料 Collections Framework 入門 #jjug #jjug_ccc #ccc_c1