代码之家  ›  专栏  ›  技术社区  ›  NimChimpsky

番石榴图书馆:它最有用和/或隐藏的功能是什么?[关闭]

  •  130
  • NimChimpsky  · 技术社区  · 16 年前

    我已经快速扫描了那张照片 Guava API 以及它提供的新集合类型( Multimap 和 BiMap

    然而,我也有一个沉默,包括图书馆,如果他们没有很大的好处和学习的特点,浪费宝贵的时间。

    你是否在你的项目中包含了Guava库,它是否以任何意想不到的方式被证明是有用的?你以后会一直用吗?它的主要优点/省时方法是什么?它隐藏的特征是什么?

    8 回复  |  直到 7 年前
        1
  •  158
  •   ColinD    16 年前

    说真的,番石榴什么都有用。我已经使用它很长一段时间了,而且仍然在不断地发现一些新的东西,我可以用它来做,比手工做代码要少。

    有些事情别人没有真正提到我喜欢:

    • Multimap 这些都很棒。任何时候你都可以用 Map<Foo, Collection<Bar>> ,使用multimap代替,这样就省去了对映射到键的现有集合的大量繁琐检查,如果不存在则创建并添加该集合。
    • Ordering Comparator 这正是你想要的。
    • Maps.uniqueIndex 和 Multimaps.index Iterable 和一个 Function 建立一个 ImmutableMap 或 ImmutableListMultimap 索引 通过将函数应用于每个。因此,使用检索项目ID的函数,可以在一行中按项目ID为项目列表编制索引。
    • 它提供的功能性材料。。。 filter , transform 等等,尽管使用类 功能 s和 Predicate here .
    • ComparisonChain 是一个很小的、容易被忽略的类,当您想编写一个比较方法来连续比较多个值时非常有用,并且在发现第一个差异时应该返回。它省去了所有繁琐的工作,只需要几行链式方法调用。
    • Objects.equal(Object,Object) -空安全等于。
    • Objects.hashCode(Object...)
    • Objects.firstNonNull(Object,Object) -如果第一个值为null,则减少获取默认值的代码,特别是如果第一个值是方法调用的结果(在以正常方式执行此操作之前,必须将其赋给变量)。
    • CharMatcher 我们已经提到过了,但是它们非常强大。
    • Throwables 让你做一些美好的事情与一次性,如 Throwables.propagate 如果它是一个 RuntimeException 或者一个 Error 把它包起来 运行期异常 否则就丢了。

    我当然可以继续,但我得去工作了。=)不管怎样,尽管我在这里列出了一些我喜欢的东西,但事实是番石榴的每样东西在某些情况下都是有用的。其中很多经常是有用的。当你使用它,你会发现更多的用途。不使用它会感觉有点像一只手被绑在背后。

        2
  •  44
  •   Jon Skeet    16 年前

    几年来,我一直在谷歌内部有效地使用番石榴,这太棒了。

    我要做的部分 尤其 喜欢的有:

    • Charsets.* -如此简单,如此有用
    • IO处理(在一行中完全读取资源等)
    • Splitter / Joiner
    • Preconditions
        3
  •  28
  •   Lord Nick    8 年前

    我最初用它来做收藏速记。例如,而不是:

    Map<String, Map<Long, List<String>>> map = new HashMap<String, Map<Long, List<String>>>();
    

    您可以这样做:

    Map<String, Map<Long, List<String>>> map = Maps.newHashMap();
    

    ImmutableMap<String,String> map = ImmutableMap.of("key1", "value1", "key2", "value2");
    

    现在,我发现了番石榴中其他一些有用的实用程序。例如 CharMatcher

    CharMatcher.inRange('a','z').or(inRange('A','Z'));
    

    或

    String phoneNumber = CharMatcher.DIGIT.retainFrom("my phone number is 123456789");
    
        4
  •  21
  •   Etienne Neveu    15 年前

    CharMatcher的precomputed()方法( source )

    这实际上只是一种优化,即创建一个查找表(使用位数组),然后简单地查找字符以查看它们是否“匹配”。

    如果您创建了一个复杂的CharMatcher(计划多次使用),则必须记住调用precomputed()方法,如:

    CharMatcher complexMatcher = CharMatcher.anyOf("cat")
                                            .or(CharMatcher.DIGIT)
                                            .or(CharMatcher.WHITESPACE)
                                            .precomputed();
    
        5
  •  16
  •   Buhake Sindi Tesnep    13 年前

    YouTube video 来自Google(发言人:kevinbourrillion,Google核心Java库的首席工程师),它展示了Google集合的美丽。谷歌所做的一件事,我认为是非常出色的,就是 保证 集合中的不变性。

        6
  •  12
  •   nanda    16 年前

    我写了三篇关于谷歌番石榴课程的文章:

    这还不是全部,你可以用番石榴做很多其他的事情。

        7
  •  8
  •   Darren Gilroy    16 年前

    绝对非常有用。它几乎总是新项目中添加的第一个库。

    1. 我们非常喜欢迭代器/Iterables和函数接口。
    2. 接口的服务家族是伟大的抽象
    3. 我们非常投入,我们已经开始使用我们的API类型的ImmutableXXX类来进行通信,以至于它无法更改。
    4. 计算地图(来自MapMaker)在某些情况下是很好的。

    总的来说,图书馆的质量很高。API考虑周全,实现扎实。强烈推荐。

        8
  •  7
  •   Dimitris Andreou    16 年前