我有过的快速扫描番石榴API,它提供了新的集合类型(Multimap
以及BiMap
例如出现有用),我想包括在项目(S)我工作的图书馆.
然而,如果它们没有什么好处并且学习这些功能浪费了宝贵的时间,我也不愿意将这些图书馆包括在内.
您是否已将Guava库包含在项目中并且以任何意外方式证明它有用吗?你将来会一直使用它吗?它的主要优点/节省时间是什么?它隐藏的功能是什么?
Col*_*inD 158
说真的,番石榴中的一切都很有用.我已经使用它已经有一段时间了,而且我仍然总是发现一些新东西,我可以用它来做,所需的代码少于手工操作.
其他一些事情没有真正提到我喜欢:
Multimap
s很棒.任何时候你都会使用类似的东西Map<Foo, Collection<Bar>>
,而是使用multimap来节省大量繁琐的检查,以便对映射到密钥的现有集合进行检查,如果不存在则创建并添加它.Ordering
非常适合构建Comparator
符合您需求的s.Maps.uniqueIndex
和Multimaps.index
:这些方法采用a Iterable
和a来Function
构建ImmutableMap
或者ImmutableListMultimap
对Iterable
通过将函数应用于每个的结果中的值进行索引.因此,使用检索项目ID的函数,您可以按一行中的ID索引项目列表.filter
,transform
等等.尽管使用Function
s和Predicate
s 类的冗长,但我发现这很有用.我举一个例子来说明这里很好地阅读.ComparisonChain
是一个很容易被忽视的小类,当你想要编写一个比较多个连续值的比较方法时,它很有用,并且应该在找到第一个差值时返回.它删除了所有单调,使它只是几行链式方法调用.Objects.equal(Object,Object)
- null safe equals.Objects.hashCode(Object...)
- 基于班级的多个字段获取哈希码的简便方法.Objects.firstNonNull(Object,Object)
- 如果第一个值为null,则减少获取默认值的代码,特别是如果第一个值是方法调用的结果(在以正常方式执行此操作之前,必须将其分配给变量).CharMatcher
已经提到过,但它们非常强大.Throwables
让你用throwables做一些好事,比如Throwables.propagate
如果它是a RuntimeException
或a则重新抛出throwable Error
并将其包装在a中RuntimeException
并抛出其他东西.我当然可以继续,但我必须开始工作.=)无论如何,尽管我在这里列出了一些我喜欢的东西,但事实是番石榴中的所有东西在某些情况下都很有用.其中大部分都很常用.当您使用它时,您会发现更多用途.不使用它会感觉有点像一只手被绑在背后.
Jon*_*eet 43
我在Google内部使用Guava已经有效了几年 - 这太棒了.
我特别喜欢的部分是:
Charsets.*
- 这么简单,非常有用Splitter
/Joiner
Preconditions
dog*_*ane 28
我最初用它来收集藏品.例如,而不是:
Map<String, Map<Long, List<String>>> map = new HashMap<String, Map<Long, List<String>>>();
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
Map<String, Map<Long, List<String>>> map = Maps.newHashMap();
Run Code Online (Sandbox Code Playgroud)
填充地图也很容易:
ImmutableMap<String,String> map = ImmutableMap.of("key1", "value1", "key2", "value2");
Run Code Online (Sandbox Code Playgroud)
现在,我发现了番石榴中存在的一些其他有用的实用程序.例如,CharMatcher类允许您匹配字符序列.你可以做:
CharMatcher.inRange('a','z').or(inRange('A','Z'));
Run Code Online (Sandbox Code Playgroud)
要么
String phoneNumber = CharMatcher.DIGIT.retainFrom("my phone number is 123456789");
Run Code Online (Sandbox Code Playgroud)
Eti*_*veu 21
CharMatcher的precomputed()方法(源代码)是一个很好的"隐藏功能",我前几天偶然发现了.
它实际上只是一个优化,它创建一个查找表(使用位数组),然后只需查找字符以查看它们是否"匹配".
这是您在使用库时可以利用的一种隐藏优化,您可能在自己的代码中没有想到自己.
当然,如果你创建一个复杂的CharMatcher,你打算多次使用它,你必须记得调用precomputed()方法,如:
CharMatcher complexMatcher = CharMatcher.anyOf("cat")
.or(CharMatcher.DIGIT)
.or(CharMatcher.WHITESPACE)
.precomputed();
Run Code Online (Sandbox Code Playgroud)
nan*_*nda 12
Google Guava是一个实用程序库,所以我怀疑其中有一个杀手类.关于效用的全部内容是你几乎在每个项目中使用它.我不记得我做过的任何不使用Java集合的项目.事实上,Google Guava的收集实用程序很棒,应该在Java SDK本身.
我在Google Guava上写了三篇关于课程的文章:
CheckedFuture
:http://blog.firdau.si/2010/07/07/guava-using-checkedfuture/ListenableFuture
:http://blog.firdau.si/2010/07/05/guava-using-listenablefuture/ComputingMap
在谷歌收藏(现为番石榴)http://blog.firdau.si/2009/11/13/computing-map-on-google-collections/而且这还不是全部,你可以用番石榴做很多其他事情.
绝对非常有用.它几乎总是第一个添加到新项目中的库.
总的来说,图书馆的质量非常高.API经过深思熟虑,实现稳固.强烈推荐.
归档时间: |
|
查看次数: |
42175 次 |
最近记录: |