java - Guava 库 : What are its most useful and/or hidden features?

标签 java guava

我快速浏览了Guava API以及它提供的新集合类型(例如,MultimapBiMap 看起来很有用),我正在考虑将这个库包含在我从事的项目中。

但是,如果库没有太大的好处并且学习这些功能会浪费宝贵的时间,我也不愿意将它们包括在内。

您是否将 Guava 库包含在您的项目中,并以任何意想不到的方式证明它很有用?你以后会一直使用它吗?它的主要好处/节省时间是什么?它的隐藏功能是什么?

最佳答案

说真的,Guava 中的一切都是有用的。我已经使用它很长一段时间了,但我仍然总是发现我可以用它来做一些新的事情,而且我需要的代码比手工操作要少。

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

  • Multimap s很棒。任何时候你都会使用 Map<Foo, Collection<Bar>> 之类的东西,请改用多映射,并为自己节省大量繁琐的检查映射到键的现有集合,如果不存在则创建和添加它。
  • Ordering非常适合建筑 Comparator s 的行为正是你想要的。
  • Maps.uniqueIndexMultimaps.index : 这些方法采用 IterableFunction并建立一个 ImmutableMapImmutableListMultimap索引 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/

相关文章:

java - (var) 无法解析为类型

java - 编写可变数量的 ListenableFuture

java - 在以某种方式同步的 map 上使用 Guava 的 MapConstraint

javafx - 在 JavaFX TableView 中显示 Google Guava 表的规范方式

java - 为什么 Java 允许在接口(interface)中嵌套类定义?

java 不运行 if 结构在 onclick 监听器内

Java FX从不同场景更改标签的值

java - Guava 缓存 : Cancel eviction of specific cached values

java - 使用 Preconditions.checkNotNull() 时如何避免出现 "potential null pointer access"?

Java RCP - 无法将文本动态设置为 SWT 标签控件