Hello, Guava !
What is Guava ?

    The Guava project contains several of Google's core
    libraries that we rely on in our Java-based projects:
    collections, caching, primitives support, concurrency
    libraries, common annotations, string processing, I/O,
    and so forth. 
                          http://code.google.com/p/guava-libraries/




               GoogleによるJavaライブラリ

                   Guaaaaaaaaaaaaaaaaaaaava!
2                                     Copyright © 2012 Akira Koyasu. Some rights reserved.
Guava provides...


    •いつも書いている煩雑なコードを簡潔に書きやすく
    •使い勝手の良いユーティリティクラス
    •コンパクトなAPI

            小さな悩みをすっきり解決。
         あまり大きな悩みは解決してくれません。



          Guaaaaaaaaaaaaaaaaaaaava!
3                         Copyright © 2012 Akira Koyasu. Some rights reserved.
How to use

    Maven dependency

           <dependency>
           	 <groupId>com.google.guava</groupId>
           	 <artifactId>guava</artifactId>
           	 <version>11.0.2</version>
           </dependency>


                   ... or Use other dependency managements,
                            Download jar from the site


                 Guaaaaaaaaaaaaaaaaaaaava!
4                                 Copyright © 2012 Akira Koyasu. Some rights reserved.
Packages
           com.google.common.annotations
           com.google.common.base
           com.google.common.cache
           com.google.common.collect
           com.google.common.eventbus
           com.google.common.hash
           com.google.common.io
           com.google.common.math
           com.google.common.net
           com.google.common.primitives
           com.google.common.util.concurrent


            Guaaaaaaaaaaaaaaaaaaaava!
5                                 Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.base




        Guaaaaaaaaaaaaaaaaaaaava!
                        Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.base




        Guaaaaaaaaaaaaaaaaaaaava!
                        Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.base

    Subject 0.

            プログラムの実行時間を測りましょう


    Subject 1.

            コストの高い処理の結果をキャッシュしましょう




                 Guaaaaaaaaaaaaaaaaaaaava!
7                                Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.base
    大切なインタフェース

       Function<F,T>
                       T apply(F input)

       Predicate<T>
                       boolean apply(T input)

        Supplier<T>
                       T get()


               Guaaaaaaaaaaaaaaaaaaaava!
8                                Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.base
    Preconditions


     import static com.google.common.base.Preconditions.*;
     ...
     	 public void someMethod(int pos) {
     	 	 checkArgument(pos > 0);
     	 }



          posが0以下の場合はIllegalArgumentExceptionが
                        スローされます


                    Guaaaaaaaaaaaaaaaaaaaava!
9                                     Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.base
     Joiner


         String[] strs = { "taro", "jiro", "saburo" };
         String str = Joiner.on(",").join(strs);



     Splitter


         String str = "taro,jiro,saburo";
         Iterable<String> strs = Splitter.on(",").split(str);




                       Guaaaaaaaaaaaaaaaaaaaava!
10                                      Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.base
     CaseFormat

                  LOWER_HYPHEN
                  LOWER_UNDERSCORE
                  LOWER_CAMEL
                  UPPER_CAMEL
                  UPPER_UNDERSCORE

     import static com.google.common.base.CaseFormat.*;

     LOWER_UNDERSCORE.to(LOWER_CAMEL, "create_date");              // createDate
     UPPER_CAMEL.to(LOWER_UNDERSCORE, "SomeName");                 // some_name


                      Guaaaaaaaaaaaaaaaaaaaava!
11                                        Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.base
     Stopwatch


        Stopwatch stopwatch = new Stopwatch().start();
        stopwatch.stop();
        System.out.printf("time: %s%n", stopwatch);



     Charsets


        Charset charset = Charsets.UTF_8;




                      Guaaaaaaaaaaaaaaaaaaaava!
12                                     Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.collect




         Guaaaaaaaaaaaaaaaaaaaava!
                         Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.collect




         Guaaaaaaaaaaaaaaaaaaaava!
                         Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.collect

     Subject 2.

           あるリストを加工して別のリストを作りましょう




                  Guaaaaaaaaaaaaaaaaaaaava!
14                                Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.collect
     頻出メソッド


         Collection<E> filter(Collection<E> unfiltered,
                          Predicate<? super E> predicate)


      Collection<T> transform(Collection<F> fromCollection,
                       Function<? super F,T> function)




                     Guaaaaaaaaaaaaaaaaaaaava!
15                                   Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.collect
     Lists

        List<String> list1 = Lists.newArrayList();
        List<String> list2
                 = Lists.newArrayListWithCapacity(100);



     Maps

        Map<Integer, String> map1 = Maps.newHashMap();
        Map<Integer, String> map2
                 = Maps.newHashMapWithExpectedSize(100);




                      Guaaaaaaaaaaaaaaaaaaaava!
16                                     Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.collect
 ForwardingCollection
    List<String> list = new ForwardingList<String>() {
    	 @Override
    	 protected List<String> delegate() {
    	 	 return backingList;
    	 }
    };


 ImmutableCollection
    ImmutableSet<String> set
    	 =ImmutableSet.<String>builder()
    	 	 .add("taro")
    	 	 .add("jiro")
    	 	 .add("saburo").build();




                      Guaaaaaaaaaaaaaaaaaaaava!
                                              Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.collect
     ComparisonChain

        public class SomeOne implements Comparable<SomeOne> {
        	 private String name;
        	 private int age;
        	
        	 @Override
        	 public int compareTo(SomeOne that) {
        	 	 return ComparisonChain.start()
        	 	           .compare(this.age, that.age)
        	 	           .compare(this.name, that.name)
        	 	           .result();
        	 }
        }


                       Guaaaaaaaaaaaaaaaaaaaava!
18                                        Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.collect
     Range


        Range<Integer> range1 = Ranges.closed(1, 10);
        range1.apply(10);   // true

        Range<Integer> range2 = Ranges.open(1, 10);
        range2.apply(10);   // false




                     Guaaaaaaaaaaaaaaaaaaaava!
19                                     Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.io
                                                                      @Beta




         Guaaaaaaaaaaaaaaaaaaaava!
                         Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.io
                                                                      @Beta




         Guaaaaaaaaaaaaaaaaaaaava!
                         Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.io

     Subject 3.

           ファイルの内容を標準出力へ出力しましょう




                  Guaaaaaaaaaaaaaaaaaaaava!
21                                Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.io
     ByteStreams

              static long copy(InputStream from, OutputStream to)

              static byte[] toByteArray(InputStream in)



     CharStreams

              static long copy(Readable from, Appendable to)

              static String toString(Readable r)




                      Guaaaaaaaaaaaaaaaaaaaava!
22                                           Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.io
     Files

             static void touch(File file)

             static void copy(File from, File to)

             static void move(File from, File to)

             static BufferedReader newReader(File file, Charset charset)

             static BufferedWriter newWriter(File file, Charset charset)




                         Guaaaaaaaaaaaaaaaaaaaava!
23                                             Copyright © 2012 Akira Koyasu. Some rights reserved.
com.google.common.io
     Resources


        URL url = Resources.getResource(Sample.class, "test.txt");
        try {
        	 String str = Resources.toString(url, Charsets.UTF_8);
        	 System.out.println(str);
        } catch (IOException e) {
        	 e.printStackTrace();
        }



           これはなんとなく微妙・・・変わるかもしれません


                       Guaaaaaaaaaaaaaaaaaaaava!
24                                        Copyright © 2012 Akira Koyasu. Some rights reserved.
Conclusion




         Guaaaaaaaaaaaaaaaaaaaava!
                         Copyright © 2012 Akira Koyasu. Some rights reserved.
Conclusion




         Guaaaaaaaaaaaaaaaaaaaava!
                         Copyright © 2012 Akira Koyasu. Some rights reserved.
Conclusion

           Google + Java = Guava


           今日から使えるライブラリ
         コンパクトなAPI=学習コスト低
              開発効率は劇的に向上


        Happy programming with Guava!!


           Guaaaaaaaaaaaaaaaaaaaava!
26                         Copyright © 2012 Akira Koyasu. Some rights reserved.
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/.



     Page1 photo from:
       http://www.flickr.com/photos/hermansaksono/4297175782/




                      Guaaaaaaaaaaaaaaaaaaaava!
27                                       Copyright © 2012 Akira Koyasu. Some rights reserved.

Hello, Guava !

  • 1.
  • 2.
    What is Guava? The Guava project contains several of Google's core libraries that we rely on in our Java-based projects: collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, and so forth.  http://code.google.com/p/guava-libraries/ GoogleによるJavaライブラリ Guaaaaaaaaaaaaaaaaaaaava! 2 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 3.
    Guava provides... •いつも書いている煩雑なコードを簡潔に書きやすく •使い勝手の良いユーティリティクラス •コンパクトなAPI 小さな悩みをすっきり解決。 あまり大きな悩みは解決してくれません。 Guaaaaaaaaaaaaaaaaaaaava! 3 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 4.
    How to use Maven dependency <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>11.0.2</version> </dependency> ... or Use other dependency managements, Download jar from the site Guaaaaaaaaaaaaaaaaaaaava! 4 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 5.
    Packages com.google.common.annotations com.google.common.base com.google.common.cache com.google.common.collect com.google.common.eventbus com.google.common.hash com.google.common.io com.google.common.math com.google.common.net com.google.common.primitives com.google.common.util.concurrent Guaaaaaaaaaaaaaaaaaaaava! 5 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 6.
    com.google.common.base Guaaaaaaaaaaaaaaaaaaaava! Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 7.
    com.google.common.base Guaaaaaaaaaaaaaaaaaaaava! Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 8.
    com.google.common.base Subject 0. プログラムの実行時間を測りましょう Subject 1. コストの高い処理の結果をキャッシュしましょう Guaaaaaaaaaaaaaaaaaaaava! 7 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 9.
    com.google.common.base 大切なインタフェース Function<F,T> T apply(F input) Predicate<T> boolean apply(T input) Supplier<T> T get() Guaaaaaaaaaaaaaaaaaaaava! 8 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 10.
    com.google.common.base Preconditions import static com.google.common.base.Preconditions.*; ... public void someMethod(int pos) { checkArgument(pos > 0); } posが0以下の場合はIllegalArgumentExceptionが スローされます Guaaaaaaaaaaaaaaaaaaaava! 9 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 11.
    com.google.common.base Joiner String[] strs = { "taro", "jiro", "saburo" }; String str = Joiner.on(",").join(strs); Splitter String str = "taro,jiro,saburo"; Iterable<String> strs = Splitter.on(",").split(str); Guaaaaaaaaaaaaaaaaaaaava! 10 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 12.
    com.google.common.base CaseFormat LOWER_HYPHEN LOWER_UNDERSCORE LOWER_CAMEL UPPER_CAMEL UPPER_UNDERSCORE import static com.google.common.base.CaseFormat.*; LOWER_UNDERSCORE.to(LOWER_CAMEL, "create_date"); // createDate UPPER_CAMEL.to(LOWER_UNDERSCORE, "SomeName"); // some_name Guaaaaaaaaaaaaaaaaaaaava! 11 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 13.
    com.google.common.base Stopwatch Stopwatch stopwatch = new Stopwatch().start(); stopwatch.stop(); System.out.printf("time: %s%n", stopwatch); Charsets Charset charset = Charsets.UTF_8; Guaaaaaaaaaaaaaaaaaaaava! 12 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 14.
    com.google.common.collect Guaaaaaaaaaaaaaaaaaaaava! Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 15.
    com.google.common.collect Guaaaaaaaaaaaaaaaaaaaava! Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 16.
    com.google.common.collect Subject 2. あるリストを加工して別のリストを作りましょう Guaaaaaaaaaaaaaaaaaaaava! 14 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 17.
    com.google.common.collect 頻出メソッド Collection<E> filter(Collection<E> unfiltered, Predicate<? super E> predicate) Collection<T> transform(Collection<F> fromCollection, Function<? super F,T> function) Guaaaaaaaaaaaaaaaaaaaava! 15 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 18.
    com.google.common.collect Lists List<String> list1 = Lists.newArrayList(); List<String> list2 = Lists.newArrayListWithCapacity(100); Maps Map<Integer, String> map1 = Maps.newHashMap(); Map<Integer, String> map2 = Maps.newHashMapWithExpectedSize(100); Guaaaaaaaaaaaaaaaaaaaava! 16 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 19.
    com.google.common.collect ForwardingCollection List<String> list = new ForwardingList<String>() { @Override protected List<String> delegate() { return backingList; } }; ImmutableCollection ImmutableSet<String> set =ImmutableSet.<String>builder() .add("taro") .add("jiro") .add("saburo").build(); Guaaaaaaaaaaaaaaaaaaaava! Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 20.
    com.google.common.collect ComparisonChain public class SomeOne implements Comparable<SomeOne> { private String name; private int age; @Override public int compareTo(SomeOne that) { return ComparisonChain.start() .compare(this.age, that.age) .compare(this.name, that.name) .result(); } } Guaaaaaaaaaaaaaaaaaaaava! 18 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 21.
    com.google.common.collect Range Range<Integer> range1 = Ranges.closed(1, 10); range1.apply(10); // true Range<Integer> range2 = Ranges.open(1, 10); range2.apply(10); // false Guaaaaaaaaaaaaaaaaaaaava! 19 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 22.
    com.google.common.io @Beta Guaaaaaaaaaaaaaaaaaaaava! Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 23.
    com.google.common.io @Beta Guaaaaaaaaaaaaaaaaaaaava! Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 24.
    com.google.common.io Subject 3. ファイルの内容を標準出力へ出力しましょう Guaaaaaaaaaaaaaaaaaaaava! 21 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 25.
    com.google.common.io ByteStreams static long copy(InputStream from, OutputStream to) static byte[] toByteArray(InputStream in) CharStreams static long copy(Readable from, Appendable to) static String toString(Readable r) Guaaaaaaaaaaaaaaaaaaaava! 22 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 26.
    com.google.common.io Files static void touch(File file) static void copy(File from, File to) static void move(File from, File to) static BufferedReader newReader(File file, Charset charset) static BufferedWriter newWriter(File file, Charset charset) Guaaaaaaaaaaaaaaaaaaaava! 23 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 27.
    com.google.common.io Resources URL url = Resources.getResource(Sample.class, "test.txt"); try { String str = Resources.toString(url, Charsets.UTF_8); System.out.println(str); } catch (IOException e) { e.printStackTrace(); } これはなんとなく微妙・・・変わるかもしれません Guaaaaaaaaaaaaaaaaaaaava! 24 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 28.
    Conclusion Guaaaaaaaaaaaaaaaaaaaava! Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 29.
    Conclusion Guaaaaaaaaaaaaaaaaaaaava! Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 30.
    Conclusion Google + Java = Guava 今日から使えるライブラリ コンパクトなAPI=学習コスト低 開発効率は劇的に向上 Happy programming with Guava!! Guaaaaaaaaaaaaaaaaaaaava! 26 Copyright © 2012 Akira Koyasu. Some rights reserved.
  • 31.
    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/. Page1 photo from: http://www.flickr.com/photos/hermansaksono/4297175782/ Guaaaaaaaaaaaaaaaaaaaava! 27 Copyright © 2012 Akira Koyasu. Some rights reserved.