SlideShare a Scribd company logo
1 of 12
Download to read offline
Guava-samples



Subject 0. プログラムの実行時間を測りましょう
	    Sample0A(JDK 版)	   	   ・・・・・・・・・	                        Page 1
	    Sample0B(Guava 版) 	
                      	     ・・・・・・・・・	                        Page 2


Subject 1. コストの高い処理の結果をキャッシュしましょう
 	   Sample1A(キャッシュ無し版) 	
                       	                 ・・・・・	               Page 3
	    Sample1B(JDK 版)	   	   ・・・・・・・・・	                        Page 4
	    Sample1C(Guava 版) 	
                      	     ・・・・・・・・・	                        Page 5


Subject 2. あるリストを加工して別のリストを作りましょう
	    Sample2A(JDK 版)	   	   ・・・・・・・・・	                        Page 6
	    Sample2B(Guava 版) 	
                      	     ・・・・・・・・・	                        Page 7


Subject 3. ファイルの内容を標準出力へ出力しましょう
	    Sample3A(JDK 版 旧 io) ・・・・・・・・・
                         	         	                          Page 8
	    Sample3B(JDK 版 nio)	   ・・・・・・・・・	                        Page 9
	    Sample3C(Guava 版) 	
                      	     ・・・・・・・・・	                        Page10




                            Copyright © 2012 Akira Koyasu Some rights reserved.
Sample0A.java

 1 p a c k a g e guava.subject0;
 2
 3 /**
 4 * Subject 0. プログラムの実行時間を測りましょう
 5 * JDK版
 6 * @ a u t h o r koyasu
 7 */
 8 p u b l i c c l a s s Sample0A {
 9
10         p u b l i c s t a t i c v o i d main(String[] args) {
11
12                 // システム時間
13            l o n g time1 = System. currentTimeMillis ();
14
15            l o n g sum = 0;
16            f o r (i n t i = 0; i < Integer. MAX_VALUE ; i++) {
                      i
17                   sum += i;
18            }
19
20            l o n g time2 = System. currentTimeMillis ();
21
22            System. out .printf("sum: %d%n", sum);
23            // 引き算をします。
24            System. out .printf("time: %d ms%n", time2 - time1);
25      }
26 }
27




                                                                   Page 1
Sample0B.java

 1   p a c k a g e guava.subject0;
 2
 3   i m p o r t com.google.common.base.Stopwatch;
 4
 5   /**
 6    * Subject 0. プログラムの実行時間を測りましょう
 7 * Guava版
 8 * @ a u t h o r koyasu
 9 */
10 p u b l i c c l a s s Sample0B {
11
12         p u b l i c s t a t i c v o i d main(String[] args) {
13
14                 // ストップウォッチ!!
15             Stopwatch stopwatch = n e w Stopwatch().start();
16
17             l o n g sum = 0;
18             f o r (i n t i = 0; i < Integer. MAX_VALUE ; i++) {
                       i
19                    sum += i;
20             }
21
22             stopwatch.stop();
23
24             System. out .printf("sum: %d%n", sum);
25             System. out .printf("time: %s%n", stopwatch);
26        }
27 }
28




                                                                   Page 2
Sample1A.java

 1   p a c k a g e guava.subject1;
 2
 3   i m p o r t java.math.BigInteger;
 4
 5   i m p o r t com.google.common.base.Stopwatch;
 6
 7   /**
 8    * Subject 1. コストの高い処理の結果をキャッシュしましょう
 9 * キャッシュ無し版
10 * @ a u t h o r koyasu
11 */
12 p u b l i c c l a s s Sample1A {
13
14         p u b l i c s t a t i c v o i d main(String[] args) {
15
16                 Stopwatch stopwatch = n e w Stopwatch().start();
17
18                 BigInteger[] f;
19                 f = getFibonacci ();
20                 f = getFibonacci ();
21                 f = getFibonacci ();
22
23                 System. out .println(f[f.length - 1]);
24
25                 System. out .printf("time: %s%n", stopwatch);
26         }
27
28         /**
29           * 20000個のフィボナッチ数を返す
30          * @return
31          */
32        p r i v a t e s t a t i c BigInteger[] getFibonacci() {
33                f i n a l i n t n = 20000;
34                BigInteger[] f = n e w BigInteger[n];
35
36             f[0] = BigInteger. ZERO ;
37             f[1] = BigInteger. ONE ;
38             f o r (i n t i = 0; i < n - 2; i++) {
                         i
39                     f[i + 2] = f[i].add(f[i + 1]);
40             }
41             System. out .println("Calc fibonacci complete.");
42             r e t u r n f;
43        }
44 }
45




                                                            Page 3
Sample1B.java

 1   p a c k a g e guava.subject1;
 2
 3   i m p o r t java.math.BigInteger;
 4
 5   i m p o r t com.google.common.base.Stopwatch;
 6
 7   /**
 8    * Subject 1. コストの高い処理の結果をキャッシュしましょう
 9 * JDK版
10 * @ a u t h o r koyasu
11 */
12 p u b l i c c l a s s Sample1B {
13
14         p u b l i c s t a t i c v o i d main(String[] args) {
15
16                 Stopwatch stopwatch = n e w Stopwatch().start();
17
18                 BigInteger[] f;
19                 f = FibonacciCalculator. get ();
20                 f = FibonacciCalculator. get ();
21                 f = FibonacciCalculator. get ();
22
23                 System. out .println(f[f.length - 1]);
24
25                 System. out .printf("time: %s%n", stopwatch);
26         }
27
28         /**
29           * 20000個のフィボナッチ数を返すクラス
30          * @return
31          */
32        p r i v a t e s t a t i c c l a s s FibonacciCalculator {
33                p r i v a t e s t a t i c BigInteger[] f ;
34
35             p r i v a t e s t a t i c BigInteger[] get() {
36                     // キャッシュを自分で書くのが、良くない
37                  i f ( f == n u l l ) {
38                        s y n c h r o n i z e d (FibonacciCalculator.c l a s s ) {
                                                                       c
39                                i f ( f == n u l l ) {
40                                        f i n a l i n t n = 20000;
41                                        f = n e w BigInteger[n];
42
43                                   f [0] = BigInteger. ZERO ;
44                                   f [1] = BigInteger. ONE ;
45                                   f o r (i n t i = 0; i < n - 2; i++) {
                                             i
46                                         f [i+2] = f [i].add( f [i+1]);
47                                   }
48                                   System. out .println("Calc fibonacci complete.");
49                             }
50                      }
51                  }
52                  return f;
53             }
54        }
55 }
56




                                                                 Page 4
Sample1C.java

 1   p a c k a g e guava.subject1;
 2
 3   i m p o r t java.math.BigInteger;
 4
 5   i m p o r t com.google.common.base.Stopwatch;
 6   i m p o r t com.google.common.base.Supplier;
 7   i m p o r t com.google.common.base.Suppliers;
 8
 9   /**
10    * Subject 1. コストの高い処理の結果をキャッシュしましょう
11 * Guava版
12 * @ a u t h o r koyasu
13 */
14 p u b l i c c l a s s Sample1C {
15
16         p u b l i c s t a t i c v o i d main(String[] args) {
17
18                 Stopwatch stopwatch = n e w Stopwatch().start();
19
20                 BigInteger[] f;
21                 f = fibonacciSupplier .get();
22                 f = fibonacciSupplier .get();
23                 f = fibonacciSupplier .get();
24
25                 System. out .println(f[f.length - 1]);
26
27                 System. out .printf("time: %s%n", stopwatch);
28         }
29
30         // 初回の計算結果をキャッシュするサプライヤー
31        p r i v a t e s t a t i c Supplier<BigInteger[]> fibonacciSupplier
32                        = Suppliers. memoize (n e w Supplier<BigInteger[]>() {
                                                     n
33                p u b l i c BigInteger[] get() {
34                        f i n a l i n t n = 20000;
35                        BigInteger[] f = n e w BigInteger[n];
36
37                  f[0] = BigInteger. ZERO ;
38                  f[1] = BigInteger. ONE ;
39                  f o r (i n t i = 0; i < n - 2; i++) {
                              i
40                          f[i+2] = f[i].add(f[i+1]);
41                  }
42                  System. out .println("Calc fibonacci complete.");
43                  r e t u r n f;
44              }
45        });
46 }
47




                                                          Page 5
Sample2A.java

 1   p a c k a g e guava.subject2;
 2
 3   import   java.util.ArrayList;
 4   import   java.util.Collections;
 5   import   java.util.HashMap;
 6   import   java.util.List;
 7   import   java.util.Map;
 8
 9   i m p o r t com.google.common.base.Stopwatch;
10
11   /**
12    * Subject 2. あるリストを加工して別のリストを作りましょう
13 * JDK版
14 * @ a u t h o r koyasu
15 */
16 p u b l i c c l a s s Sample2A {
17
18         // 元のリスト
19        @SuppressWarnings("serial")
20        p r i v a t e s t a t i c List<Integer> srcList = n e w ArrayList<Integer>(){{
21                f o r (i n t i = 0; i < 1000; i++) {
                          i
22                      add(Integer. valueOf (i));
23                }
24        }};
25
26        // マスタマップ(不変にする)
27        @SuppressWarnings("serial")
28        p r i v a t e s t a t i c Map<Integer, String> map = Collections. unmodifiableMap (
29                      n e w HashMap<Integer, String>(){{
30                f o r (i n t i = 0; i < 10000; i++) {
                          i
31                      put(Integer. valueOf (i), "[" + i + "]の値");
32               }
33        }});
34
35        p u b l i c s t a t i c v o i d main(String[] args) {
36                System. out .printf("src[0]: %s%n", srcList .get(0));
37                System. out .printf("map[0]: %s%n", map .entrySet().iterator().next());
38
39               Stopwatch stopwatch = n e w Stopwatch().start();
40
41               List<String> dstList = n e w ArrayList<String>( srcList .size());
42               // ループして変換する
43               f o r (Integer src : srcList ) {
44                     String val = map .get(src);
45                     dstList.add(val);
46               }
47
48               stopwatch.stop();
49
50               System. out .printf("dst[0]: %s%n", dstList.get(0));
51               System. out .printf("time: %s%n", stopwatch);
52        }
53 }
54




                                                          Page 6
Sample2B.java

 1   p a c k a g e guava.subject2;
 2
 3   i m p o r t java.util.ArrayList;
 4   i m p o r t java.util.List;
 5   i m p o r t java.util.Map;
 6
 7   import   com.google.common.base.Function;
 8   import   com.google.common.base.Functions;
 9   import   com.google.common.base.Stopwatch;
10   import   com.google.common.collect.ImmutableMap;
11   import   com.google.common.collect.Iterables;
12   import   com.google.common.collect.Lists;
13
14   /**
15    * Subject 2. あるリストを加工して別のリストを作りましょう
16 * Guava版
17 * @ a u t h o r koyasu
18 */
19 p u b l i c c l a s s Sample2B {
20
21         // 元のリスト
22        @SuppressWarnings("serial")
23        p r i v a t e s t a t i c List<Integer> srcList = n e w ArrayList<Integer>(){{
24                f o r (i n t i = 0; i < 1000; i++) {
                          i
25                      add(Integer. valueOf (i));
26                }
27        }};
28
29        // マスタマップ(不変にする)
30        p r i v a t e s t a t i c f i n a l Map<Integer, String> map ;
31        static {
32                ImmutableMap.Builder<Integer, String> builder
33                              = ImmutableMap. builder ();
34                f o r (i n t i = 0; i < 10000; i++) {
                          i
35                      builder.put(Integer. valueOf (i), "[" + i + "]の値");
36             }
37             map = builder.build();
38        }
39
40        p u b l i c s t a t i c v o i d main(String[] args) {
41                System. out .printf("src[0]: %s%n", srcList .get(0));
42                System. out .printf("map[0]: %s%n", Iterables. get ( map .entrySet(), 0));
43
44             Stopwatch stopwatch = n e w Stopwatch().start();
45
46             // 変換関数で変換
47             List<String> dstList = Lists. transform (
48                         srcList , n e w Function<Integer, String>(){
49                 @Override
50                 p u b l i c String apply(Integer input) {
51                         r e t u r n map .get(input);
52                 }});
53
54             stopwatch.stop();
55
56             System. out .printf("dst[0]: %s%n", dstList.get(0));
57             System. out .printf("time: %s%n", stopwatch);
58
59             // 運が良ければこんな方法もある
60             List<String> dstList2 = Lists. transform (
61                     srcList , Functions. forMap ( map ));
62
63             System. out .println();
64             System. out .printf("dst2[0]: %s%n", dstList2.get(0));
65        }
66 }


                                                          Page 7
Sample3A.java

 1   p a c k a g e guava.subject3;
 2
 3   i m p o r t java.io.BufferedInputStream;
 4   i m p o r t java.io.FileInputStream;
 5   i m p o r t java.io.IOException;
 6
 7   i m p o r t com.google.common.base.Stopwatch;
 8
 9   /**
10    * Subject 3. ファイルの内容を標準出力へ出力しましょう
11 * JDK版 旧io
12 * @ a u t h o r koyasu
13 */
14 p u b l i c c l a s s Sample3A {
15
16         p u b l i c s t a t i c v o i d main(String[] args) {
17                 String path = "/path/to/file.txt";
18
19                 Stopwatch stopwatch = n e w Stopwatch().start();
20                 BufferedInputStream is = n u l l ;
21                 try {
22                       is = n e w BufferedInputStream(n e w FileInputStream(path));
                                                             n
23                       // バッファを用意する
24                  b y t e [] buf = n e w b y t e [0x1000];
25                  i n t len;
26                  // 読み出したバイトを書き込み
27                   w h i l e ((len = is.read(buf)) >= 0) {
28                           System. out .write(buf, 0, len);
29                   }
30             } c a t c h (IOException e) {
31                   e.printStackTrace();
32             } finally {
33                   i f (is != n u l l ) {
34                           try {
35                                 is.close();
36                           } c a t c h (IOException e) {
37                                 e.printStackTrace();
38                           }
39                   }
40             }
41             stopwatch.stop();
42
43             System. out .printf("time: %s%n", stopwatch);
44        }
45 }
46




                                                               Page 8
Sample3B.java

 1   p a c k a g e guava.subject3;
 2
 3   import   java.io.FileInputStream;
 4   import   java.io.FileNotFoundException;
 5   import   java.io.IOException;
 6   import   java.nio.channels.Channels;
 7   import   java.nio.channels.FileChannel;
 8
 9   i m p o r t com.google.common.base.Stopwatch;
10
11   /**
12    * Subject 3. ファイルの内容を標準出力へ出力しましょう
13 * JDK版 nio
14 * @ a u t h o r koyasu
15 */
16 p u b l i c c l a s s Sample3B {
17
18         p u b l i c s t a t i c v o i d main(String[] args) {
19                 String path = "/path/to/file.txt";
20
21                 Stopwatch stopwatch = n e w Stopwatch().start();
22
23                 FileChannel channel = n u l l ;
24                 try {
25                       // ファイルチャネルを使う(悪くない)
26                  channel = n e w FileInputStream(path).getChannel();
27                  channel.transferTo(0, channel.size(),
28                          Channels. newChannel (System. out ));
29
30             } c a t c h (FileNotFoundException e) {
31                   e.printStackTrace();
32             } c a t c h (IOException e) {
33                   e.printStackTrace();
34             } finally {
35                   i f (channel != n u l l ) {
36                         try {
37                               channel.close();
38                         } c a t c h (IOException e) {
39                               e.printStackTrace();
40                         }
41                   }
42             }
43
44
45             stopwatch.stop();
46
47             System. out .printf("time: %s%n", stopwatch);
48        }
49 }
50




                                                           Page 9
Sample3C.java

 1   p a c k a g e guava.subject3;
 2
 3   i m p o r t java.io.File;
 4   i m p o r t java.io.IOException;
 5
 6   i m p o r t com.google.common.base.Stopwatch;
 7   i m p o r t com.google.common.io.Files;
 8
 9   /**
10    * Subject 3. ファイルの内容を標準出力へ出力しましょう
11 * Guava版
12 * @ a u t h o r koyasu
13 */
14 p u b l i c c l a s s Sample3C {
15
16         p u b l i c s t a t i c v o i d main(String[] args) {
17                 String path = "/path/to/file.txt";
18
19                 Stopwatch stopwatch = n e w Stopwatch().start();
20                 try {
21                       // コピー!!
22                   Files. copy (n e w File(path), System. out );
                                  n
23             } c a t c h (IOException e) {
24                   e.printStackTrace();
25             }
26             stopwatch.stop();
27
28             System. out .printf("time: %s%n", stopwatch);
29        }
30 }
31




                                                          Page 10
Notes




This work is licensed under the Creative Commons Attribution-NonCommercial 3.0 Unported
License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/3.0/.

More Related Content

What's hot

定理証明支援系Coqについて
定理証明支援系Coqについて定理証明支援系Coqについて
定理証明支援系CoqについてYoshihiro Mizoguchi
 
Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018David Buck
 
Java SE 7 InvokeDynamic in JRuby
Java SE 7 InvokeDynamic in JRubyJava SE 7 InvokeDynamic in JRuby
Java SE 7 InvokeDynamic in JRubyHiroshi Nakamura
 
X tapp lecture_20140226_tapioca
X tapp lecture_20140226_tapiocaX tapp lecture_20140226_tapioca
X tapp lecture_20140226_tapiocaxTAPP
 
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」Fujio Kojima
 
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能MITSUNARI Shigeo
 
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
iTamabi 13  第7回:ARTSAT API 実践 2 衛星の情報で表現するiTamabi 13  第7回:ARTSAT API 実践 2 衛星の情報で表現する
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現するAtsushi Tadokoro
 
appengine ja night #4 Transaction Puzzlers
appengine ja night #4 Transaction Puzzlersappengine ja night #4 Transaction Puzzlers
appengine ja night #4 Transaction PuzzlersSuguru ARAKAWA
 
20150701卒研進捗LT (share)
20150701卒研進捗LT (share)20150701卒研進捗LT (share)
20150701卒研進捗LT (share)mohemohe
 
GC in C++0x
GC in C++0xGC in C++0x
GC in C++0xyak1ex
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~Fujio Kojima
 
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Fixstars Corporation
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxpsMITSUNARI Shigeo
 

What's hot (17)

定理証明支援系Coqについて
定理証明支援系Coqについて定理証明支援系Coqについて
定理証明支援系Coqについて
 
Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018Var handles jjug_ccc_spring_2018
Var handles jjug_ccc_spring_2018
 
Java SE 7 InvokeDynamic in JRuby
Java SE 7 InvokeDynamic in JRubyJava SE 7 InvokeDynamic in JRuby
Java SE 7 InvokeDynamic in JRuby
 
Coqチュートリアル
CoqチュートリアルCoqチュートリアル
Coqチュートリアル
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
 
Halide for Memory
Halide for MemoryHalide for Memory
Halide for Memory
 
X tapp lecture_20140226_tapioca
X tapp lecture_20140226_tapiocaX tapp lecture_20140226_tapioca
X tapp lecture_20140226_tapioca
 
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
 
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
 
20180728 halide-study
20180728 halide-study20180728 halide-study
20180728 halide-study
 
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
iTamabi 13  第7回:ARTSAT API 実践 2 衛星の情報で表現するiTamabi 13  第7回:ARTSAT API 実践 2 衛星の情報で表現する
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
 
appengine ja night #4 Transaction Puzzlers
appengine ja night #4 Transaction Puzzlersappengine ja night #4 Transaction Puzzlers
appengine ja night #4 Transaction Puzzlers
 
20150701卒研進捗LT (share)
20150701卒研進捗LT (share)20150701卒研進捗LT (share)
20150701卒研進捗LT (share)
 
GC in C++0x
GC in C++0xGC in C++0x
GC in C++0x
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
 
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
 

Similar to Hello, Guava ! samples

C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~Fujio Kojima
 
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...Masahiro Sakai
 
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Toshio Ehara
 
ソフトウェア工学2023 10 デバッグ
ソフトウェア工学2023 10 デバッグソフトウェア工学2023 10 デバッグ
ソフトウェア工学2023 10 デバッグToru Tamaki
 
第12回 配信講義 計算科学技術特論B(2022)
第12回 配信講義 計算科学技術特論B(2022)第12回 配信講義 計算科学技術特論B(2022)
第12回 配信講義 計算科学技術特論B(2022)RCCSRENKEI
 
ATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlersATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlersAdvancedTechNight
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングKohsuke Yuasa
 
イチからはじめるLuarida-マイコン
イチからはじめるLuarida-マイコンイチからはじめるLuarida-マイコン
イチからはじめるLuarida-マイコン三七男 山本
 
Cython ことはじめ
Cython ことはじめCython ことはじめ
Cython ことはじめgion_XY
 
第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)RCCSRENKEI
 
Spmv9forpublic
Spmv9forpublicSpmv9forpublic
Spmv9forpublicT2C_
 
Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)TatsuyaKatayama
 
pi-14. イベント, イベントハンドラ, ソケット通信
pi-14. イベント, イベントハンドラ, ソケット通信pi-14. イベント, イベントハンドラ, ソケット通信
pi-14. イベント, イベントハンドラ, ソケット通信kunihikokaneko1
 
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)Ryuuta Tsunashima
 
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会Koichi Sakata
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回Tomoya Kawanishi
 
DMM.comにおけるビッグデータ処理のためのSQL活用術
DMM.comにおけるビッグデータ処理のためのSQL活用術DMM.comにおけるビッグデータ処理のためのSQL活用術
DMM.comにおけるビッグデータ処理のためのSQL活用術DMM.com
 

Similar to Hello, Guava ! samples (20)

C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
 
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
 
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料
 
ソフトウェア工学2023 10 デバッグ
ソフトウェア工学2023 10 デバッグソフトウェア工学2023 10 デバッグ
ソフトウェア工学2023 10 デバッグ
 
VerilatorとSystemC
VerilatorとSystemCVerilatorとSystemC
VerilatorとSystemC
 
第12回 配信講義 計算科学技術特論B(2022)
第12回 配信講義 計算科学技術特論B(2022)第12回 配信講義 計算科学技術特論B(2022)
第12回 配信講義 計算科学技術特論B(2022)
 
ATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlersATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlers
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
イチからはじめるLuarida-マイコン
イチからはじめるLuarida-マイコンイチからはじめるLuarida-マイコン
イチからはじめるLuarida-マイコン
 
CPUから見たG1GC
CPUから見たG1GCCPUから見たG1GC
CPUから見たG1GC
 
Cython ことはじめ
Cython ことはじめCython ことはじめ
Cython ことはじめ
 
第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)
 
Spmv9forpublic
Spmv9forpublicSpmv9forpublic
Spmv9forpublic
 
Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)
 
pi-14. イベント, イベントハンドラ, ソケット通信
pi-14. イベント, イベントハンドラ, ソケット通信pi-14. イベント, イベントハンドラ, ソケット通信
pi-14. イベント, イベントハンドラ, ソケット通信
 
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
 
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
 
DMM.comにおけるビッグデータ処理のためのSQL活用術
DMM.comにおけるビッグデータ処理のためのSQL活用術DMM.comにおけるビッグデータ処理のためのSQL活用術
DMM.comにおけるビッグデータ処理のためのSQL活用術
 

More from 輝 子安

Protractor under the hood
Protractor under the hoodProtractor under the hood
Protractor under the hood輝 子安
 
そろそろLambda(CI/CD編)
そろそろLambda(CI/CD編)そろそろLambda(CI/CD編)
そろそろLambda(CI/CD編)輝 子安
 
Dockerで構成するWebサービス 〜EmotionTechの場合〜
Dockerで構成するWebサービス 〜EmotionTechの場合〜Dockerで構成するWebサービス 〜EmotionTechの場合〜
Dockerで構成するWebサービス 〜EmotionTechの場合〜輝 子安
 
Workshop: Docker on Elastic Beanstalk
Workshop: Docker on Elastic BeanstalkWorkshop: Docker on Elastic Beanstalk
Workshop: Docker on Elastic Beanstalk輝 子安
 
PHP conference 2013 ja report
PHP conference 2013 ja reportPHP conference 2013 ja report
PHP conference 2013 ja report輝 子安
 
Scala for Java programmers
Scala for Java programmersScala for Java programmers
Scala for Java programmers輝 子安
 
Garbage Collection for Dummies
Garbage Collection for DummiesGarbage Collection for Dummies
Garbage Collection for Dummies輝 子安
 
JavaOne Guide for the Petite Bourgeoisie
JavaOne Guide for the Petite BourgeoisieJavaOne Guide for the Petite Bourgeoisie
JavaOne Guide for the Petite Bourgeoisie輝 子安
 
Java, Moving Forward
Java, Moving ForwardJava, Moving Forward
Java, Moving Forward輝 子安
 
Java, Up to Date
Java, Up to DateJava, Up to Date
Java, Up to Date輝 子安
 
Java, Up to Date Sources
Java, Up to Date SourcesJava, Up to Date Sources
Java, Up to Date Sources輝 子安
 
Hello, Guava !
Hello, Guava !Hello, Guava !
Hello, Guava !輝 子安
 
Tokyo Cabinet & Tokyo Tyrant
Tokyo Cabinet & Tokyo TyrantTokyo Cabinet & Tokyo Tyrant
Tokyo Cabinet & Tokyo Tyrant輝 子安
 

More from 輝 子安 (13)

Protractor under the hood
Protractor under the hoodProtractor under the hood
Protractor under the hood
 
そろそろLambda(CI/CD編)
そろそろLambda(CI/CD編)そろそろLambda(CI/CD編)
そろそろLambda(CI/CD編)
 
Dockerで構成するWebサービス 〜EmotionTechの場合〜
Dockerで構成するWebサービス 〜EmotionTechの場合〜Dockerで構成するWebサービス 〜EmotionTechの場合〜
Dockerで構成するWebサービス 〜EmotionTechの場合〜
 
Workshop: Docker on Elastic Beanstalk
Workshop: Docker on Elastic BeanstalkWorkshop: Docker on Elastic Beanstalk
Workshop: Docker on Elastic Beanstalk
 
PHP conference 2013 ja report
PHP conference 2013 ja reportPHP conference 2013 ja report
PHP conference 2013 ja report
 
Scala for Java programmers
Scala for Java programmersScala for Java programmers
Scala for Java programmers
 
Garbage Collection for Dummies
Garbage Collection for DummiesGarbage Collection for Dummies
Garbage Collection for Dummies
 
JavaOne Guide for the Petite Bourgeoisie
JavaOne Guide for the Petite BourgeoisieJavaOne Guide for the Petite Bourgeoisie
JavaOne Guide for the Petite Bourgeoisie
 
Java, Moving Forward
Java, Moving ForwardJava, Moving Forward
Java, Moving Forward
 
Java, Up to Date
Java, Up to DateJava, Up to Date
Java, Up to Date
 
Java, Up to Date Sources
Java, Up to Date SourcesJava, Up to Date Sources
Java, Up to Date Sources
 
Hello, Guava !
Hello, Guava !Hello, Guava !
Hello, Guava !
 
Tokyo Cabinet & Tokyo Tyrant
Tokyo Cabinet & Tokyo TyrantTokyo Cabinet & Tokyo Tyrant
Tokyo Cabinet & Tokyo Tyrant
 

Recently uploaded

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 

Recently uploaded (12)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

Hello, Guava ! samples

  • 1. Guava-samples Subject 0. プログラムの実行時間を測りましょう Sample0A(JDK 版) ・・・・・・・・・ Page 1 Sample0B(Guava 版) ・・・・・・・・・ Page 2 Subject 1. コストの高い処理の結果をキャッシュしましょう Sample1A(キャッシュ無し版) ・・・・・ Page 3 Sample1B(JDK 版) ・・・・・・・・・ Page 4 Sample1C(Guava 版) ・・・・・・・・・ Page 5 Subject 2. あるリストを加工して別のリストを作りましょう Sample2A(JDK 版) ・・・・・・・・・ Page 6 Sample2B(Guava 版) ・・・・・・・・・ Page 7 Subject 3. ファイルの内容を標準出力へ出力しましょう Sample3A(JDK 版 旧 io) ・・・・・・・・・ Page 8 Sample3B(JDK 版 nio) ・・・・・・・・・ Page 9 Sample3C(Guava 版) ・・・・・・・・・ Page10 Copyright © 2012 Akira Koyasu Some rights reserved.
  • 2. Sample0A.java 1 p a c k a g e guava.subject0; 2 3 /** 4 * Subject 0. プログラムの実行時間を測りましょう 5 * JDK版 6 * @ a u t h o r koyasu 7 */ 8 p u b l i c c l a s s Sample0A { 9 10 p u b l i c s t a t i c v o i d main(String[] args) { 11 12 // システム時間 13 l o n g time1 = System. currentTimeMillis (); 14 15 l o n g sum = 0; 16 f o r (i n t i = 0; i < Integer. MAX_VALUE ; i++) { i 17 sum += i; 18 } 19 20 l o n g time2 = System. currentTimeMillis (); 21 22 System. out .printf("sum: %d%n", sum); 23 // 引き算をします。 24 System. out .printf("time: %d ms%n", time2 - time1); 25 } 26 } 27 Page 1
  • 3. Sample0B.java 1 p a c k a g e guava.subject0; 2 3 i m p o r t com.google.common.base.Stopwatch; 4 5 /** 6 * Subject 0. プログラムの実行時間を測りましょう 7 * Guava版 8 * @ a u t h o r koyasu 9 */ 10 p u b l i c c l a s s Sample0B { 11 12 p u b l i c s t a t i c v o i d main(String[] args) { 13 14 // ストップウォッチ!! 15 Stopwatch stopwatch = n e w Stopwatch().start(); 16 17 l o n g sum = 0; 18 f o r (i n t i = 0; i < Integer. MAX_VALUE ; i++) { i 19 sum += i; 20 } 21 22 stopwatch.stop(); 23 24 System. out .printf("sum: %d%n", sum); 25 System. out .printf("time: %s%n", stopwatch); 26 } 27 } 28 Page 2
  • 4. Sample1A.java 1 p a c k a g e guava.subject1; 2 3 i m p o r t java.math.BigInteger; 4 5 i m p o r t com.google.common.base.Stopwatch; 6 7 /** 8 * Subject 1. コストの高い処理の結果をキャッシュしましょう 9 * キャッシュ無し版 10 * @ a u t h o r koyasu 11 */ 12 p u b l i c c l a s s Sample1A { 13 14 p u b l i c s t a t i c v o i d main(String[] args) { 15 16 Stopwatch stopwatch = n e w Stopwatch().start(); 17 18 BigInteger[] f; 19 f = getFibonacci (); 20 f = getFibonacci (); 21 f = getFibonacci (); 22 23 System. out .println(f[f.length - 1]); 24 25 System. out .printf("time: %s%n", stopwatch); 26 } 27 28 /** 29 * 20000個のフィボナッチ数を返す 30 * @return 31 */ 32 p r i v a t e s t a t i c BigInteger[] getFibonacci() { 33 f i n a l i n t n = 20000; 34 BigInteger[] f = n e w BigInteger[n]; 35 36 f[0] = BigInteger. ZERO ; 37 f[1] = BigInteger. ONE ; 38 f o r (i n t i = 0; i < n - 2; i++) { i 39 f[i + 2] = f[i].add(f[i + 1]); 40 } 41 System. out .println("Calc fibonacci complete."); 42 r e t u r n f; 43 } 44 } 45 Page 3
  • 5. Sample1B.java 1 p a c k a g e guava.subject1; 2 3 i m p o r t java.math.BigInteger; 4 5 i m p o r t com.google.common.base.Stopwatch; 6 7 /** 8 * Subject 1. コストの高い処理の結果をキャッシュしましょう 9 * JDK版 10 * @ a u t h o r koyasu 11 */ 12 p u b l i c c l a s s Sample1B { 13 14 p u b l i c s t a t i c v o i d main(String[] args) { 15 16 Stopwatch stopwatch = n e w Stopwatch().start(); 17 18 BigInteger[] f; 19 f = FibonacciCalculator. get (); 20 f = FibonacciCalculator. get (); 21 f = FibonacciCalculator. get (); 22 23 System. out .println(f[f.length - 1]); 24 25 System. out .printf("time: %s%n", stopwatch); 26 } 27 28 /** 29 * 20000個のフィボナッチ数を返すクラス 30 * @return 31 */ 32 p r i v a t e s t a t i c c l a s s FibonacciCalculator { 33 p r i v a t e s t a t i c BigInteger[] f ; 34 35 p r i v a t e s t a t i c BigInteger[] get() { 36 // キャッシュを自分で書くのが、良くない 37 i f ( f == n u l l ) { 38 s y n c h r o n i z e d (FibonacciCalculator.c l a s s ) { c 39 i f ( f == n u l l ) { 40 f i n a l i n t n = 20000; 41 f = n e w BigInteger[n]; 42 43 f [0] = BigInteger. ZERO ; 44 f [1] = BigInteger. ONE ; 45 f o r (i n t i = 0; i < n - 2; i++) { i 46 f [i+2] = f [i].add( f [i+1]); 47 } 48 System. out .println("Calc fibonacci complete."); 49 } 50 } 51 } 52 return f; 53 } 54 } 55 } 56 Page 4
  • 6. Sample1C.java 1 p a c k a g e guava.subject1; 2 3 i m p o r t java.math.BigInteger; 4 5 i m p o r t com.google.common.base.Stopwatch; 6 i m p o r t com.google.common.base.Supplier; 7 i m p o r t com.google.common.base.Suppliers; 8 9 /** 10 * Subject 1. コストの高い処理の結果をキャッシュしましょう 11 * Guava版 12 * @ a u t h o r koyasu 13 */ 14 p u b l i c c l a s s Sample1C { 15 16 p u b l i c s t a t i c v o i d main(String[] args) { 17 18 Stopwatch stopwatch = n e w Stopwatch().start(); 19 20 BigInteger[] f; 21 f = fibonacciSupplier .get(); 22 f = fibonacciSupplier .get(); 23 f = fibonacciSupplier .get(); 24 25 System. out .println(f[f.length - 1]); 26 27 System. out .printf("time: %s%n", stopwatch); 28 } 29 30 // 初回の計算結果をキャッシュするサプライヤー 31 p r i v a t e s t a t i c Supplier<BigInteger[]> fibonacciSupplier 32 = Suppliers. memoize (n e w Supplier<BigInteger[]>() { n 33 p u b l i c BigInteger[] get() { 34 f i n a l i n t n = 20000; 35 BigInteger[] f = n e w BigInteger[n]; 36 37 f[0] = BigInteger. ZERO ; 38 f[1] = BigInteger. ONE ; 39 f o r (i n t i = 0; i < n - 2; i++) { i 40 f[i+2] = f[i].add(f[i+1]); 41 } 42 System. out .println("Calc fibonacci complete."); 43 r e t u r n f; 44 } 45 }); 46 } 47 Page 5
  • 7. Sample2A.java 1 p a c k a g e guava.subject2; 2 3 import java.util.ArrayList; 4 import java.util.Collections; 5 import java.util.HashMap; 6 import java.util.List; 7 import java.util.Map; 8 9 i m p o r t com.google.common.base.Stopwatch; 10 11 /** 12 * Subject 2. あるリストを加工して別のリストを作りましょう 13 * JDK版 14 * @ a u t h o r koyasu 15 */ 16 p u b l i c c l a s s Sample2A { 17 18 // 元のリスト 19 @SuppressWarnings("serial") 20 p r i v a t e s t a t i c List<Integer> srcList = n e w ArrayList<Integer>(){{ 21 f o r (i n t i = 0; i < 1000; i++) { i 22 add(Integer. valueOf (i)); 23 } 24 }}; 25 26 // マスタマップ(不変にする) 27 @SuppressWarnings("serial") 28 p r i v a t e s t a t i c Map<Integer, String> map = Collections. unmodifiableMap ( 29 n e w HashMap<Integer, String>(){{ 30 f o r (i n t i = 0; i < 10000; i++) { i 31 put(Integer. valueOf (i), "[" + i + "]の値"); 32 } 33 }}); 34 35 p u b l i c s t a t i c v o i d main(String[] args) { 36 System. out .printf("src[0]: %s%n", srcList .get(0)); 37 System. out .printf("map[0]: %s%n", map .entrySet().iterator().next()); 38 39 Stopwatch stopwatch = n e w Stopwatch().start(); 40 41 List<String> dstList = n e w ArrayList<String>( srcList .size()); 42 // ループして変換する 43 f o r (Integer src : srcList ) { 44 String val = map .get(src); 45 dstList.add(val); 46 } 47 48 stopwatch.stop(); 49 50 System. out .printf("dst[0]: %s%n", dstList.get(0)); 51 System. out .printf("time: %s%n", stopwatch); 52 } 53 } 54 Page 6
  • 8. Sample2B.java 1 p a c k a g e guava.subject2; 2 3 i m p o r t java.util.ArrayList; 4 i m p o r t java.util.List; 5 i m p o r t java.util.Map; 6 7 import com.google.common.base.Function; 8 import com.google.common.base.Functions; 9 import com.google.common.base.Stopwatch; 10 import com.google.common.collect.ImmutableMap; 11 import com.google.common.collect.Iterables; 12 import com.google.common.collect.Lists; 13 14 /** 15 * Subject 2. あるリストを加工して別のリストを作りましょう 16 * Guava版 17 * @ a u t h o r koyasu 18 */ 19 p u b l i c c l a s s Sample2B { 20 21 // 元のリスト 22 @SuppressWarnings("serial") 23 p r i v a t e s t a t i c List<Integer> srcList = n e w ArrayList<Integer>(){{ 24 f o r (i n t i = 0; i < 1000; i++) { i 25 add(Integer. valueOf (i)); 26 } 27 }}; 28 29 // マスタマップ(不変にする) 30 p r i v a t e s t a t i c f i n a l Map<Integer, String> map ; 31 static { 32 ImmutableMap.Builder<Integer, String> builder 33 = ImmutableMap. builder (); 34 f o r (i n t i = 0; i < 10000; i++) { i 35 builder.put(Integer. valueOf (i), "[" + i + "]の値"); 36 } 37 map = builder.build(); 38 } 39 40 p u b l i c s t a t i c v o i d main(String[] args) { 41 System. out .printf("src[0]: %s%n", srcList .get(0)); 42 System. out .printf("map[0]: %s%n", Iterables. get ( map .entrySet(), 0)); 43 44 Stopwatch stopwatch = n e w Stopwatch().start(); 45 46 // 変換関数で変換 47 List<String> dstList = Lists. transform ( 48 srcList , n e w Function<Integer, String>(){ 49 @Override 50 p u b l i c String apply(Integer input) { 51 r e t u r n map .get(input); 52 }}); 53 54 stopwatch.stop(); 55 56 System. out .printf("dst[0]: %s%n", dstList.get(0)); 57 System. out .printf("time: %s%n", stopwatch); 58 59 // 運が良ければこんな方法もある 60 List<String> dstList2 = Lists. transform ( 61 srcList , Functions. forMap ( map )); 62 63 System. out .println(); 64 System. out .printf("dst2[0]: %s%n", dstList2.get(0)); 65 } 66 } Page 7
  • 9. Sample3A.java 1 p a c k a g e guava.subject3; 2 3 i m p o r t java.io.BufferedInputStream; 4 i m p o r t java.io.FileInputStream; 5 i m p o r t java.io.IOException; 6 7 i m p o r t com.google.common.base.Stopwatch; 8 9 /** 10 * Subject 3. ファイルの内容を標準出力へ出力しましょう 11 * JDK版 旧io 12 * @ a u t h o r koyasu 13 */ 14 p u b l i c c l a s s Sample3A { 15 16 p u b l i c s t a t i c v o i d main(String[] args) { 17 String path = "/path/to/file.txt"; 18 19 Stopwatch stopwatch = n e w Stopwatch().start(); 20 BufferedInputStream is = n u l l ; 21 try { 22 is = n e w BufferedInputStream(n e w FileInputStream(path)); n 23 // バッファを用意する 24 b y t e [] buf = n e w b y t e [0x1000]; 25 i n t len; 26 // 読み出したバイトを書き込み 27 w h i l e ((len = is.read(buf)) >= 0) { 28 System. out .write(buf, 0, len); 29 } 30 } c a t c h (IOException e) { 31 e.printStackTrace(); 32 } finally { 33 i f (is != n u l l ) { 34 try { 35 is.close(); 36 } c a t c h (IOException e) { 37 e.printStackTrace(); 38 } 39 } 40 } 41 stopwatch.stop(); 42 43 System. out .printf("time: %s%n", stopwatch); 44 } 45 } 46 Page 8
  • 10. Sample3B.java 1 p a c k a g e guava.subject3; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.IOException; 6 import java.nio.channels.Channels; 7 import java.nio.channels.FileChannel; 8 9 i m p o r t com.google.common.base.Stopwatch; 10 11 /** 12 * Subject 3. ファイルの内容を標準出力へ出力しましょう 13 * JDK版 nio 14 * @ a u t h o r koyasu 15 */ 16 p u b l i c c l a s s Sample3B { 17 18 p u b l i c s t a t i c v o i d main(String[] args) { 19 String path = "/path/to/file.txt"; 20 21 Stopwatch stopwatch = n e w Stopwatch().start(); 22 23 FileChannel channel = n u l l ; 24 try { 25 // ファイルチャネルを使う(悪くない) 26 channel = n e w FileInputStream(path).getChannel(); 27 channel.transferTo(0, channel.size(), 28 Channels. newChannel (System. out )); 29 30 } c a t c h (FileNotFoundException e) { 31 e.printStackTrace(); 32 } c a t c h (IOException e) { 33 e.printStackTrace(); 34 } finally { 35 i f (channel != n u l l ) { 36 try { 37 channel.close(); 38 } c a t c h (IOException e) { 39 e.printStackTrace(); 40 } 41 } 42 } 43 44 45 stopwatch.stop(); 46 47 System. out .printf("time: %s%n", stopwatch); 48 } 49 } 50 Page 9
  • 11. Sample3C.java 1 p a c k a g e guava.subject3; 2 3 i m p o r t java.io.File; 4 i m p o r t java.io.IOException; 5 6 i m p o r t com.google.common.base.Stopwatch; 7 i m p o r t com.google.common.io.Files; 8 9 /** 10 * Subject 3. ファイルの内容を標準出力へ出力しましょう 11 * Guava版 12 * @ a u t h o r koyasu 13 */ 14 p u b l i c c l a s s Sample3C { 15 16 p u b l i c s t a t i c v o i d main(String[] args) { 17 String path = "/path/to/file.txt"; 18 19 Stopwatch stopwatch = n e w Stopwatch().start(); 20 try { 21 // コピー!! 22 Files. copy (n e w File(path), System. out ); n 23 } c a t c h (IOException e) { 24 e.printStackTrace(); 25 } 26 stopwatch.stop(); 27 28 System. out .printf("time: %s%n", stopwatch); 29 } 30 } 31 Page 10
  • 12. Notes This work is licensed under the Creative Commons Attribution-NonCommercial 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/3.0/.