我快速浏览了Guava API以及它提供的新集合类型(例如,Multimap
和 BiMap
看起来很有用),我正在考虑将这个库包含在我从事的项目中。
但是,如果库没有太大的好处并且学习这些功能会浪费宝贵的时间,我也不愿意将它们包括在内。
您是否将 Guava 库包含在您的项目中,并以任何意想不到的方式证明它很有用?你以后会一直使用它吗?它的主要好处/节省时间是什么?它的隐藏功能是什么?
最佳答案
说真的,Guava 中的一切都是有用的。我已经使用它很长一段时间了,但我仍然总是发现我可以用它来做一些新的事情,而且我需要的代码比手工操作要少。
有些事情别人没有真正提到我喜欢:
-
Multimap
s很棒。任何时候你都会使用Map<Foo, Collection<Bar>>
之类的东西,请改用多映射,并为自己节省大量繁琐的检查映射到键的现有集合,如果不存在则创建和添加它。 -
Ordering
非常适合建筑Comparator
s 的行为正是你想要的。 -
Maps.uniqueIndex
和Multimaps.index
: 这些方法采用Iterable
和Function
并建立一个ImmutableMap
或ImmutableListMultimap
索引Iterable
中的值通过将函数应用于每个的结果。因此,使用检索项目 ID 的函数,您可以在一行中按 ID 为项目列表编制索引。 - 它提供的功能性东西...
filter
,transform
等。尽管对Function
使用类很冗长和Predicate
s,我发现这很有用。我举了一个例子,说明如何让这篇文章很好读 here . -
ComparisonChain
是一个很小的、容易被忽略的类,当你想编写一个比较方法来连续比较多个值并在找到第一个差异时返回时很有用。它消除了所有的乏味,使其只需几行链式方法调用。 -
Objects.equal(Object,Object)
- null 安全等于。 -
Objects.hashCode(Object...)
- 基于类的多个字段获取哈希码的简单方法。 -
Objects.firstNonNull(Object,Object)
- 如果第一个值为空,则减少获取默认值的代码,特别是如果第一个值是方法调用的结果(在以正常方式执行此操作之前,您必须将其分配给变量)。 -
CharMatcher
s 已经提到过,但它们非常强大。 -
Throwables
让你用 throwable 做一些好事,比如Throwables.propagate
如果它是RuntimeException
,它会重新抛出一个 throwable或Error
并将其包装在RuntimeException
中否则抛出。
我当然可以继续,但我必须开始工作。 =) 无论如何,尽管我在这里列出了一些我喜欢的东西,但事实上 Guava 中的所有东西在某些情况下都是有用的。其中大部分是非常有用的。当你使用它时,你会发现更多的用途。不使用它会感觉有点像一只手被绑在背后。
关于java - Guava 库 : What are its most useful and/or hidden features?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3759440/