SlideShare a Scribd company logo
1 of 31
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.

More Related Content

What's hot

Should I Use Scalding or Scoobi or Scrunch?
Should I Use Scalding or Scoobi or Scrunch? Should I Use Scalding or Scoobi or Scrunch?
Should I Use Scalding or Scoobi or Scrunch? DataWorks Summit
 
Gpars concepts explained
Gpars concepts explainedGpars concepts explained
Gpars concepts explainedVaclav Pech
 
Scalding: Twitter's Scala DSL for Hadoop/Cascading
Scalding: Twitter's Scala DSL for Hadoop/CascadingScalding: Twitter's Scala DSL for Hadoop/Cascading
Scalding: Twitter's Scala DSL for Hadoop/Cascadingjohnynek
 
Introduction to Scalding and Monoids
Introduction to Scalding and MonoidsIntroduction to Scalding and Monoids
Introduction to Scalding and MonoidsHugo Gävert
 
Functional programming in Java 8 - workshop at flatMap Oslo 2014
Functional programming in Java 8 - workshop at flatMap Oslo 2014Functional programming in Java 8 - workshop at flatMap Oslo 2014
Functional programming in Java 8 - workshop at flatMap Oslo 2014Fredrik Vraalsen
 
concurrency with GPars
concurrency with GParsconcurrency with GPars
concurrency with GParsPaul King
 
Scala introduction
Scala introductionScala introduction
Scala introductionvito jeng
 
Java 8 - Return of the Java
Java 8 - Return of the JavaJava 8 - Return of the Java
Java 8 - Return of the JavaFredrik Vraalsen
 
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation stream
JDays Lviv 2014:  Java8 vs Scala:  Difference points & innovation streamJDays Lviv 2014:  Java8 vs Scala:  Difference points & innovation stream
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation streamRuslan Shevchenko
 
Spark Schema For Free with David Szakallas
 Spark Schema For Free with David Szakallas Spark Schema For Free with David Szakallas
Spark Schema For Free with David SzakallasDatabricks
 
Scalaz 8 vs Akka Actors
Scalaz 8 vs Akka ActorsScalaz 8 vs Akka Actors
Scalaz 8 vs Akka ActorsJohn De Goes
 
Spark schema for free with David Szakallas
Spark schema for free with David SzakallasSpark schema for free with David Szakallas
Spark schema for free with David SzakallasDatabricks
 

What's hot (20)

Scala
ScalaScala
Scala
 
Should I Use Scalding or Scoobi or Scrunch?
Should I Use Scalding or Scoobi or Scrunch? Should I Use Scalding or Scoobi or Scrunch?
Should I Use Scalding or Scoobi or Scrunch?
 
Gpars concepts explained
Gpars concepts explainedGpars concepts explained
Gpars concepts explained
 
Scalding: Twitter's Scala DSL for Hadoop/Cascading
Scalding: Twitter's Scala DSL for Hadoop/CascadingScalding: Twitter's Scala DSL for Hadoop/Cascading
Scalding: Twitter's Scala DSL for Hadoop/Cascading
 
Introduction to Scalding and Monoids
Introduction to Scalding and MonoidsIntroduction to Scalding and Monoids
Introduction to Scalding and Monoids
 
Functional programming in Java 8 - workshop at flatMap Oslo 2014
Functional programming in Java 8 - workshop at flatMap Oslo 2014Functional programming in Java 8 - workshop at flatMap Oslo 2014
Functional programming in Java 8 - workshop at flatMap Oslo 2014
 
concurrency with GPars
concurrency with GParsconcurrency with GPars
concurrency with GPars
 
Clojure And Swing
Clojure And SwingClojure And Swing
Clojure And Swing
 
Scala introduction
Scala introductionScala introduction
Scala introduction
 
Groovy intro for OUDL
Groovy intro for OUDLGroovy intro for OUDL
Groovy intro for OUDL
 
Java 8 - Return of the Java
Java 8 - Return of the JavaJava 8 - Return of the Java
Java 8 - Return of the Java
 
Joy of scala
Joy of scalaJoy of scala
Joy of scala
 
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation stream
JDays Lviv 2014:  Java8 vs Scala:  Difference points & innovation streamJDays Lviv 2014:  Java8 vs Scala:  Difference points & innovation stream
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation stream
 
Spark Schema For Free with David Szakallas
 Spark Schema For Free with David Szakallas Spark Schema For Free with David Szakallas
Spark Schema For Free with David Szakallas
 
Scalaz 8 vs Akka Actors
Scalaz 8 vs Akka ActorsScalaz 8 vs Akka Actors
Scalaz 8 vs Akka Actors
 
Spark schema for free with David Szakallas
Spark schema for free with David SzakallasSpark schema for free with David Szakallas
Spark schema for free with David Szakallas
 
Scala introduction
Scala introductionScala introduction
Scala introduction
 
Scala in a nutshell by venkat
Scala in a nutshell by venkatScala in a nutshell by venkat
Scala in a nutshell by venkat
 
Scala vs java 8
Scala vs java 8Scala vs java 8
Scala vs java 8
 
Spark workshop
Spark workshopSpark workshop
Spark workshop
 

Similar to Hello, Guava !

Java is Container Ready - Vaibhav - Container Conference 2018
Java is Container Ready - Vaibhav - Container Conference 2018Java is Container Ready - Vaibhav - Container Conference 2018
Java is Container Ready - Vaibhav - Container Conference 2018CodeOps Technologies LLP
 
Google Guava & EMF @ GTUG Nantes
Google Guava & EMF @ GTUG NantesGoogle Guava & EMF @ GTUG Nantes
Google Guava & EMF @ GTUG Nantesmikaelbarbero
 
Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]
Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]
Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]David Buck
 
BeJUG Meetup - What's coming in the OSGi R7 Specification
BeJUG Meetup - What's coming in the OSGi R7 SpecificationBeJUG Meetup - What's coming in the OSGi R7 Specification
BeJUG Meetup - What's coming in the OSGi R7 SpecificationStijn Van Den Enden
 
"Quantum" Performance Effects
"Quantum" Performance Effects"Quantum" Performance Effects
"Quantum" Performance EffectsSergey Kuksenko
 
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...Guillaume Laforge
 
JavaFX 2.1 - следующее поколение клиентской Java
JavaFX 2.1 - следующее поколение клиентской JavaJavaFX 2.1 - следующее поколение клиентской Java
JavaFX 2.1 - следующее поколение клиентской JavaAlexander_K
 
Tales About Scala Performance
Tales About Scala PerformanceTales About Scala Performance
Tales About Scala PerformanceHaim Yadid
 
Java, Up to Date
Java, Up to DateJava, Up to Date
Java, Up to Date輝 子安
 
“Quantum” Performance Effects: beyond the Core
“Quantum” Performance Effects: beyond the Core“Quantum” Performance Effects: beyond the Core
“Quantum” Performance Effects: beyond the CoreC4Media
 
Leveraging the Latest OSGi R7 Specifications - C Ziegeler & D Bosschaert
Leveraging the Latest OSGi R7 Specifications - C Ziegeler & D BosschaertLeveraging the Latest OSGi R7 Specifications - C Ziegeler & D Bosschaert
Leveraging the Latest OSGi R7 Specifications - C Ziegeler & D Bosschaertmfrancis
 
Project Helidon Overview (Japanese)
Project Helidon Overview (Japanese)Project Helidon Overview (Japanese)
Project Helidon Overview (Japanese)Logico
 
GraalVM Native Images by Oleg Selajev @shelajev
GraalVM Native Images by Oleg Selajev @shelajevGraalVM Native Images by Oleg Selajev @shelajev
GraalVM Native Images by Oleg Selajev @shelajevOracle Developers
 

Similar to Hello, Guava ! (20)

Java is Container Ready - Vaibhav - Container Conference 2018
Java is Container Ready - Vaibhav - Container Conference 2018Java is Container Ready - Vaibhav - Container Conference 2018
Java is Container Ready - Vaibhav - Container Conference 2018
 
Java Cloud and Container Ready
Java Cloud and Container ReadyJava Cloud and Container Ready
Java Cloud and Container Ready
 
Guava & EMF
Guava & EMFGuava & EMF
Guava & EMF
 
Google Guava & EMF @ GTUG Nantes
Google Guava & EMF @ GTUG NantesGoogle Guava & EMF @ GTUG Nantes
Google Guava & EMF @ GTUG Nantes
 
Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]
Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]
Java Concurrency, A(nother) Peek Under the Hood [JavaOne 2016 CON1497]
 
BeJUG Meetup - What's coming in the OSGi R7 Specification
BeJUG Meetup - What's coming in the OSGi R7 SpecificationBeJUG Meetup - What's coming in the OSGi R7 Specification
BeJUG Meetup - What's coming in the OSGi R7 Specification
 
"Quantum" Performance Effects
"Quantum" Performance Effects"Quantum" Performance Effects
"Quantum" Performance Effects
 
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
 
What's New in Groovy 1.6?
What's New in Groovy 1.6?What's New in Groovy 1.6?
What's New in Groovy 1.6?
 
JavaFX 2.1 - следующее поколение клиентской Java
JavaFX 2.1 - следующее поколение клиентской JavaJavaFX 2.1 - следующее поколение клиентской Java
JavaFX 2.1 - следующее поколение клиентской Java
 
Tales About Scala Performance
Tales About Scala PerformanceTales About Scala Performance
Tales About Scala Performance
 
Java, Up to Date
Java, Up to DateJava, Up to Date
Java, Up to Date
 
Sightly_techInsight
Sightly_techInsightSightly_techInsight
Sightly_techInsight
 
“Quantum” Performance Effects: beyond the Core
“Quantum” Performance Effects: beyond the Core“Quantum” Performance Effects: beyond the Core
“Quantum” Performance Effects: beyond the Core
 
Leveraging the Latest OSGi R7 Specifications - C Ziegeler & D Bosschaert
Leveraging the Latest OSGi R7 Specifications - C Ziegeler & D BosschaertLeveraging the Latest OSGi R7 Specifications - C Ziegeler & D Bosschaert
Leveraging the Latest OSGi R7 Specifications - C Ziegeler & D Bosschaert
 
Drupal.Behaviors
Drupal.BehaviorsDrupal.Behaviors
Drupal.Behaviors
 
Project Helidon Overview (Japanese)
Project Helidon Overview (Japanese)Project Helidon Overview (Japanese)
Project Helidon Overview (Japanese)
 
GraalVM Native Images by Oleg Selajev @shelajev
GraalVM Native Images by Oleg Selajev @shelajevGraalVM Native Images by Oleg Selajev @shelajev
GraalVM Native Images by Oleg Selajev @shelajev
 
Zero To Dojo
Zero To DojoZero To Dojo
Zero To Dojo
 
Java SE 8
Java SE 8Java SE 8
Java SE 8
 

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輝 子安
 
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 Sources
Java, Up to Date SourcesJava, Up to Date Sources
Java, Up to Date Sources輝 子安
 
Hello, Guava ! samples
Hello, Guava ! samplesHello, Guava ! samples
Hello, Guava ! samples輝 子安
 
Tokyo Cabinet & Tokyo Tyrant
Tokyo Cabinet & Tokyo TyrantTokyo Cabinet & Tokyo Tyrant
Tokyo Cabinet & Tokyo Tyrant輝 子安
 

More from 輝 子安 (11)

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
 
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 Sources
Java, Up to Date SourcesJava, Up to Date Sources
Java, Up to Date Sources
 
Hello, Guava ! samples
Hello, Guava ! samplesHello, Guava ! samples
Hello, Guava ! samples
 
Tokyo Cabinet & Tokyo Tyrant
Tokyo Cabinet & Tokyo TyrantTokyo Cabinet & Tokyo Tyrant
Tokyo Cabinet & Tokyo Tyrant
 

Recently uploaded

Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 

Recently uploaded (20)

Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 

Hello, Guava !

  • 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.

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n