使用番石榴的5个理由

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还为MapsSets等人的收藏提供了许多有用的实用程序功能。 类。 我最喜欢的是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/

参考:来自Lviv博客Java用户组的 JCG合作伙伴 Andriy Andrunevchyn 使用Guava的5个理由

翻译自: https://www.javacodegeeks.com/2013/06/5-reasons-to-use-guava.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值