Guava是一个开放源代码库,其中包含许多Java类,由Google编写。 它是杂项实用程序函数和类的潜在有用来源,我敢肯定,许多开发人员以前已经写过自己,或者只是想要并且从来没有时间编写它们。 这是使用它的5个充分理由!
1.集合初始化器和实用程序
通用同构集合是Java中的一个很棒的功能,但是有时它们的构造有点太冗长,例如:
final Map<String, Map<String, Integer>> lookup = new HashMap<String, Map<String, Integer>>();
Java 7通过允许非正式地称为Diamond运算符的有限形式的类型推断,以一种真正通用的方式解决了这个问题。 因此,我们可以将上面的示例重写为:
final Map<String, Map<String, Integer>> lookup = new HashMap<>();
在较早的Java发行版中,实际上已经可以对非构造函数方法进行这种推断,并且Guava为现有的Java集合提供了许多现成的构造函数。 上面的例子可以写成:
final Map<String, Map<String, Integer>> lookup = Maps.newHashMap();
Guava还为Maps , Sets等人的收藏提供了许多有用的实用程序功能。 类。 我最喜欢的是Sets.union和Sets.intersection方法,这些方法返回集合上的视图,而不是重新计算值。
2.有限的功能样式编程
Guava提供了一些常用的方法来以功能样式传递方法。 例如,许多功能性编程语言所具有的map函数以Collections2.transform方法的形式存在。 Collections2还具有过滤器方法,该方法允许您限制集合中的值。 例如,要从一个集合中删除为空的元素,并将其存储在另一个集合中,可以执行以下操作:
Collection<?> noNullsCollection = filter(someCollection, notNull());
重要的是要记住,在这两种情况下,该函数都返回一个新集合,而不是修改现有集合,并且延迟地计算了所得集合。
3.多图和双图
Map的真正常见用法是为单个键存储多个值。 使用标准Java集合通常通过使用另一个集合作为值类型来完成。 不幸的是,这最终涉及许多仪式,就初始化收藏而言,这些仪式需要重复。 多图可以将其清除很多,例如:
Multimap<String, Integer> scores = HashMultimap.create();
scores.put("Bob", 20);
scores.put("Bob", 10);
scores.put("Bob", 15);
System.out.println(Collections.max(scores.get("Bob"))); // prints 20
还有一个双向的BiMap类-也就是说,它强制值和键具有唯一性。 由于值也是唯一的,因此可以反向使用BiMap。
4.简单的哈希码和比较器
想要从其字段的哈希码为Java中的类生成哈希码是很常见的。 Guava在Objects类中为此提供了一种实用程序方法,下面是一个示例:
int foo;
String bar;@Override
public int hashCode() {return Objects.hashCode(foo, bar);
}
如果要定义哈希码方法,请不要忘记保持平等契约 。
比较器是另一个示例,其中经常编写比较器涉及将一系列操作链接在一起。 Guava提供了一个ComparisonChain类以简化此过程。 这是一个带有int和String类的示例:
int foo;
String bar;@Override
public int compareTo(final GuavaExample o) {return ComparisonChain.start().compare(foo, o.foo).compare(bar, o.bar).result();
}
5.防御性编码
您是否发现自己定期为方法编写某些前提条件? 有时,这些内容可能不必要地冗长,或者无法直接传达意图。 Guava为Preconditions类提供了一系列常见的前提条件。
例如,代替if语句和显式异常throw…
if (count <= 0) {throw new IllegalArgumentException("must be positive: " + count);
}
…您可以使用一个明确的前提:
checkArgument(count > 0, "must be positive: %s", count);
结论
能够用guava中的类替换现有的库类,可以帮助您减少需要维护的代码量,并可能提高生产力。 还有其他选择,例如Apache Commons项目。 可能是您已经使用并了解了这些库,或者比Guava方法更喜欢它们的方法和api。 Guava确实有一个Idea Graveyard –可让您对Google工程师认为是库的限制或错误的设计决策有一些了解。 您可能不会单独同意这些选择,此时您将回到编写自己的库类。 总体而言,尽管Guava鼓励简洁而礼貌的风格,但Guava的某些适当应用可以帮助许多Java项目。
原文: http : //insightfullogic.com/blog/2011/oct/21/5-reasons-use-guava/
翻译自: https://www.javacodegeeks.com/2013/06/5-reasons-to-use-guava.html