More Related Content Similar to Guava 讓你的程式碼簡潔有力 2014 Java Developer Day (20) Guava 讓你的程式碼簡潔有力 2014 Java Developer Day 6. Java version
• Before Java 1.5
• Java 1.5
• Java 1.6 / 1.7
• Java 1.8
Unsupport
Guava (JDK5 Backport)
Guava release 17
Consider
7. App 使⽤用 Guava 開發
http://www.appbrain.com/stats/libraries/details/guava/google-guava
9. 測驗時間
Arrays.toString(“,apple,,banana,”.split(“,”))
的輸出是以下何者?
2 ) , apple , , banana ,
3 ) , apple , , banana
1 ) null, apple , null, banana , null
4 ) apple , banana
10. 測驗時間
Arrays.toString(“,apple,,banana,”.split(“,”))
的輸出是以下何者?
2 ) , apple , , banana ,
3 ) , apple , , banana
1 ) null, apple , null, banana , null
4 ) apple , banana
但,其實你想
要的是這個
12. 終於在Java8⾒見到 join !
String.join(",", ",apple,,banana,".split(","));
,apple,,banana
“,apple,,banana”",apple,,banana,"== is FALSE
13. 13
Splitter / Joiner
Splitter.on(“,”).split(“,apple,,banana,");
Joiner.on(“,”).join( ___ );
“,apple,,banana,”",apple,,banana,"== is TRUE
“,apple,,banana,”
21. ____是對的
ORDER BY name, quarter, value
NAS:AAPL 13Q1 250
NAS:AAPL 13Q2 350
NAS:GOOG 13Q1 100
NAS:GOOD 13Q2 200
NAS:MFST 13Q1 300
22. ORDER BY name,
quarter, value
NAS:AAPL 600
NAS:AAPL 13Q1 250
NAS:AAPL 13Q2 350
NAS:GOOG 300
NAS:GOOD 13Q1 100
NAS:GOOD 13Q2 200
13Q1 350
13Q2 550
name null @ last
quarter null @ first
____永遠是對的
24. 24
Ordering
[ Barack Obama
, Bill Gates
, Steve Jobs
, Abola Lee ]
[ Abola Lee
, Barack Obama
, Bill Gates
, Steve Jobs ]
Collections.sort(names)
Collections.sort(names,
byReverseLengthThenName)
http://qconsf.com/sf2012/dl/qcon-sanfran-2012/slides/
KevinBourrillion_AnOverviewOfGuavaGoogleCoreLibrariesForJava.pdf
26. 26
Ordering
Then chaining method:
● reverse()
● compound(Comparator)
● onResultOf(Function)
● nullsFirst()
● nullsLast()
http://qconsf.com/sf2012/dl/qcon-sanfran-2012/slides/
KevinBourrillion_AnOverviewOfGuavaGoogleCoreLibrariesForJava.pdf
30. List Set Map
Lists.newArrayList() Sets.newHashSet() Maps.newHashMap()
Lists.newLinkedList() Sets.newLinkedHashSet() Maps.newLinkedHashMap()
Sets.newTreeSet() Maps.newTreeMap()
Sets.newConcurrentHashSet() Maps.newConcurrentMap()
Maps.newEnumMap()
Guava way Static constructors
38. 滿意 [A,E,I,O,U]
尚可 [X,Y,Z]
差勁 [M,N,P,Q]
滿意 [A,E,I,O,U]
尚可 [B,X,Y,Z]
差勁 [M,N,P,Q]
尚可 BVoting
Guava way!
39. Multimap - 字元陣列
MultiMap
with JAVA style
Map<K, List<V>> / Map<K, Set<V>>資料結構:
List Implementations: ArrayListMultimap, LinkedListMultimap
HashMultimap, LinkedHashMultimap,
TreeMultimap
Set Implementations:
put(“尚可”, “X”)
put(“尚可”, “Z”)
put(“滿意”, “A”)
put(“差勁”, “P”)
put(“尚可”, “Y”)
put(“滿意”, “U”)
滿意 [A,E,I,O,U]
尚可 [B,X,Y,Z]
差勁 [M,N,P,Q]
40. 40
Multimap - 字元陣列
get(K) 回傳 Collection<V>
pub(K,V) 將V加⼊入K的Collection
pubAll(K,Collection) 將集合中的值全部加⼊入
remove(K,V) 移除K collection中的V值
removeAll(K) 移除K
asMap() 回傳Map<K,Collection<V>>
values() 回傳Collection<V>
Map<K, List<V>> / Map<K, Set<V>>資料結構:
with JAVA style
41. 41
Map<K, List<V>>
List<List<V>>
values()
[[A,E,I,O,U]!
, [B,X,Y,Z]!
, [M,N,P,Q]]
Multimap<K, V>
List<V>
values()
[A,E,I,O,U,B!
,X,Y,Z,M,N,P,Q]
[A, B, C, D x 2, E x 2, F x 2, G x 2,
H x 3, I x 3, J x 3, K x 2, L x 2, M x
2, N x 2, O, P]!
滿意 [A,B,C,D,E,F,G,H,I,J]
尚可 [D,E,F,G,H,I,J,K,L,M,N]
差勁 [H,I,J,K,L,M,N,O,P]
42. BiMap - Value Key
BiMap
台積電
鴻海
宏達電
2317
2330
2498
keys values
Implementations:HashBiMap
43. stock quartly value
goog 13Q1 283
goog 13Q1 3278
goog 13Q1 982
msft 13Q2 883
aapl 13Q1 3341
aapl 13Q2 367
….. ….. …..
NAS:GOOG NAS:MSFT NAS:AAPL
13Q1 16858 24519 57594
13Q2 14893 18529 37472
13Q3 14105 19896 35323
13Q4 12951 20489 43603
Pivot
sum
Pivoting plz wait……
Get cell value………
44. stock quartly value
goog 13Q1 283
goog 13Q1 3278
goog 13Q1 982
msft 13Q2 883
aapl 13Q1 3341
aapl 13Q2 367
….. ….. …..
NAS:GOOG NAS:MSFT NAS:AAPL
13Q1 16858 24519 57594
13Q2 14893 18529 37472
13Q3 14105 19896 35323
13Q4 12951 20489 43603
Pivot
sum
Guava way: Table
Get value from Table
45. Map<R, Map<C, V>>
Table<R,C,V> - ⼆二維陣列
NAS:GOOG NAS:MSFT NAS:AAPL
13Q1 16858 24519 57594
13Q2 14893 18529 37472
13Q3 14105 19896 35323
13Q4 12951 20489 43603
資料結構:
Implementations: HashBasedTable,
TreeBasedTable
R Ccontains(R, C)
!
get(R, C)
!
put(R,C, V)
!
remove(R, C)
Boolean
!
V
46. 46
NAS:GOOG NAS:MSFT NAS:AAPL
13Q1 16858 24519 57594
13Q2 14893 18529 37472
13Q3 14105 19896 35323
13Q4 12951 20489 43603
R C
Table<R,C,V> - 抽取⾏行列資料
column(C)
Map<K, V>
row(R) Map<C, V>
{ 13Q4=12951
, 13Q3=14105
, 13Q2=14893
, 13Q1=16858}
{ NAS:AAPL=37472
, NAS:MSFT=18529
, NAS:GOOG=14893}
47. 47
NAS:GOOG NAS:MSFT NAS:AAPL
13Q1 16858 24519 57594
13Q2 14893 18529 37472
13Q3 14105 19896 35323
13Q4 12951 20489 43603
R C
Table<R,C,V> - 抽取⾏行列資料
columnKeySet()
containsColumn(C)
containsRow(R) rowKeySet()
boolean Set<R>
[13Q4, 13Q3, 13Q2, 13Q1]
Set<C>
[NAS:AAPL, NAS:MSFT, NAS:GOOG]
boolean
51. 51
RangeMap - 操作特性
[1 .. 10]
[1 .. 3] (3 .. 6) [6 .. 10]
[1 .. 3] (3 .. 6) [6 .. 10]
(10 .. 20)
[1 .. 3] (3 .. 5)
(11 .. 20)
rangeMap.put(Range.closed(1, 10), "foo");
rangeMap.put(Range.open(3, 6), "foo");
rangeMap.put(Range.open(10,20), "foo");
rangeMap.remove(Range.closed(5, 11));
52. 52
Range
(a .. b) open! a < x < b
[a .. b] closed a <= x <= b
[a .. b)! closedOpen a <= x < b
(a .. b] openClosed a < x <= b
(a .. ∞) greaterThan a < x
[a .. ∞) atLeast a <= x
(-∞.. b) leaseThan x < b
(-∞.. b] atMost x <= b
(-∞.. ∞) all all values
61. 61
考⽣生 科⺫⽬目 題數
考⽣生A 國⽂文 48
考⽣生A 英⽂文 39
考⽣生A 數學 26
考⽣生B 國⽂文 43
考⽣生B 英⽂文 30
考⽣生B 數學 20
考⽣生C 國⽂文 44
考⽣生C 英⽂文 40
考⽣生C 數學 27
考⽣生D 國⽂文 18
考⽣生D 英⽂文 25
[45 .. 48] A++
[43 .. 44] A+
[41 .. 42] A
[35 .. 40] B++
[30 .. 34] B+
[19 .. 29] B
[ 0 .. 18] C
考⽣生 科⺫⽬目 題數
考⽣生A 國⽂文 48
考⽣生B 國⽂文 43
考⽣生C 國⽂文 44
考⽣生D 國⽂文 18
考⽣生 科⺫⽬目 等級
考⽣生A 國⽂文 A++
考⽣生B 國⽂文 A+
考⽣生C 國⽂文 A+
考⽣生D 國⽂文 C
filter
國⽂文
transform
Need Result
63. 63
還記得 Range 嗎?
public final class Range<C extends Comparable>
implements Predicate<C>, Serializable {…}
[51, 52, 53, 54, 55, 56, 57, 58, 59, 60]