Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[Mateusz Herych] Guava beyond Collections

[Mateusz Herych] Guava beyond Collections

Presentation from GDG DevFest - the biggest Google related event in Ukraine. October 24-25, Lviv. Learn more at http://devfest.gdg.org.ua/

Google Developers Group Lviv

October 25, 2014
Tweet

More Decks by Google Developers Group Lviv

Other Decks in Programming

Transcript

  1. View Slide

  2. Java is not perfect.

    View Slide

  3. Actually

    View Slide

  4. Java sucks.

    View Slide

  5. Java sucks.
    At least compared to other languages.

    View Slide

  6. Scala?

    View Slide

  7. Scala?
    case class Person (firstName: String, lastName: String)

    View Slide

  8. View Slide

  9. class Person {
    private final String firstName;
    private final String lastName;
    public Person(String firstName, String lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
    }
    }

    View Slide

  10. class Person {
    private final String firstName;
    private final String lastName;
    public Person(String firstName, String lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
    }
    public String getFirstName() {
    return firstName;
    }
    public String getLastName() {
    return lastName;
    }
    }

    View Slide

  11. View Slide

  12. View Slide

  13. Scala?
    case class Person (firstName: String, lastName: String)

    View Slide

  14. View Slide

  15. View Slide

  16. View Slide

  17. Mateusz Herych
    GDG Kraków
    Android GDE
    Engineer, Base CRM

    View Slide

  18. Guava

    View Slide

  19. Google’s Java

    View Slide

  20. View Slide

  21. View Slide

  22. View Slide

  23. View Slide

  24. null

    View Slide

  25. Wikipedia

    View Slide

  26. Wikipedia
    In programming, nullable types are a feature of the type
    system of some programming languages which allow the
    value to be set to the special value NULL instead of the
    usual possible values of the data type. In statically-typed
    languages, a nullable type is an option type (in functional
    programming terms), while in dynamically-typed
    languages (where values have types, but variables do
    not), equivalent behavior is provided by having a single
    null value.

    View Slide

  27. View Slide

  28. View Slide

  29. Null’s inventor

    View Slide

  30. Sir Tony Hoare
    “I call it my billion-dollar
    mistake. It was the invention
    of the null reference in 1965.”

    View Slide

  31. Billion dollar mistake.

    View Slide

  32. View Slide

  33. View Slide

  34. View Slide

  35. View Slide

  36. View Slide

  37. Optional

    View Slide

  38. View Slide

  39. Multimaps

    View Slide

  40. View Slide

  41. Key -> List of Values

    View Slide

  42. View Slide

  43. Aygul - [2]
    Mateusz - [1,2,3]

    View Slide

  44. Immutable Collections

    View Slide

  45. Mutable state

    View Slide

  46. View Slide

  47. Mutable state

    View Slide

  48. Mutable state
    - Race conditions (multiple threads anyone?)

    View Slide

  49. Mutable state
    - Race conditions (multiple threads anyone?)
    - Harder debugging (what/who caused THAT
    change to my object?)

    View Slide

  50. Mutable state
    - Race conditions (multiple threads anyone?)
    - Harder debugging (what/who caused THAT
    change to my object?)
    - Do you trust your libraries?

    View Slide

  51. Srsly

    View Slide

  52. Do you trust them?

    View Slide

  53. View Slide

  54. View Slide

  55. Okay, don’t be that paranoid maybe.

    View Slide

  56. Usually you can trust your libraries.

    View Slide

  57. But!

    View Slide

  58. You don’t want to trust your co-
    workers, don’t you?

    View Slide

  59. Immutable = Not changed over time.

    View Slide

  60. View Slide

  61. Also:
    - ImmutableMap
    - ImmutableSet
    - ...

    View Slide

  62. Caches

    View Slide

  63. Some operations are heavy

    View Slide

  64. And we want to avoid invoking them
    more that it’s needed

    View Slide

  65. Caches are hard

    View Slide

  66. Caches
    - Expiration

    View Slide

  67. Caches
    - Expiration
    - Invalidation

    View Slide

  68. Caches
    - Expiration
    - Invalidation
    - Weight/Sizes...

    View Slide

  69. Caches
    - Expiration
    - Invalidation
    - Weight/Sizes…
    - … aaand that’s only beginning!

    View Slide

  70. View Slide

  71. Guava is huge!

    View Slide

  72. Preconditions
    Concurrency
    I/O
    EventBus! (but don’t use it on Android)
    Tons of utilities

    View Slide

  73. https://code.google.com/p/guava-
    libraries/wiki/GuavaExplained

    View Slide

  74. Last note.

    View Slide

  75. 65K method limit, anyone?

    View Slide

  76. Proguard in debug - no obfuscation, just
    shrinking unused methods

    View Slide

  77. Proguard in debug - no obfuscation, just
    shrinking unused methods.
    Multidex

    View Slide

  78. Proguard in debug - no obfuscation, just
    shrinking unused methods.
    Multidex
    jar stripping?

    View Slide

  79. There are WAYS

    View Slide

  80. Just give it a try

    View Slide

  81. and become a Guava addict

    View Slide

  82. ?

    View Slide