【发布时间】:2016-05-19 09:51:20
【问题描述】:
我经常想使用 Guava 的集合实用程序编写代码,并在查看代码片段后发现自己用纯 Java 7 重写了代码,因为恕我直言,使用纯旧 Java 更简洁且更易于阅读。
例如,使用 Guava 将对象列表放入具有唯一索引的地图中,看起来像这样:
List<A> myList = ...
Map<A, B> mappings = Maps.uniqueIndex(myList, new Function<A, B>() {
@Override
public CustomerFinance apply(final A input) {
return input.getB();
}
});
而在原版 Java 7 中则是:
List<A> myList = ...
Map<A, B> mappings = new HashMap<>(myList.size());
for (A a : myList) {
mappings.put(a.getB(), a);
}
Guava 中的映射有 5 个 LOC(甚至不包括 @Override 行),而普通 Java 中有 4 个 LOC。
我为什么要在这里使用 Guava 工具?最初创建实用程序的动机是什么?我是否错过了番石榴为我提供的一些额外好处?
【问题讨论】:
-
Java 8 已经推出 2 年多了,它可以在 1 行中完成任务。你为什么关心 Java 7?
-
我真的没有,我想尽快升级。不幸的是,参与我正在从事的当前项目的重要利益相关者不同意。
-
您的 Java 7 只是更短,因为它是 Guava 代码的不完整“翻译”。 Guavas 生成的 Map 是不可变的,并且不允许
null作为值之一。您的代码完全忽略了这一点。 -
@Tom 不变性是一个问题,是的。但在我的实际用例中,我什至需要一个 mutable 映射。所以 Guava 版本更长,因为我必须将生成的地图输入 HashMap 以获得可变版本。
-
FWIW,Guava doesn't recommend 如果替代方案更简洁,那么您将竭尽全力在 Java 7 中使用其功能性惯用语。当函数是您可能想要重用的东西(或者您可以使用 Guava 提供的函数之一)或者当操作本身足够复杂以至于自己编写容易出错或使您的代码更复杂时,它们会更有用.
标签: java collections guava