【发布时间】:2016-10-17 14:49:08
【问题描述】:
一次又一次,我发现自己处于想要使用一个值的情况,同时将它添加到一个集合中,例如:
List<String> names = new ArrayList<>();
person1.setName(addTo(names, "Peter"));
person2.setName(addTo(names, "Karen"));
(注意:使用 java.util.Collection.add(E) 当然不起作用,因为它返回一个布尔值。)
当然,自己编写一个实用方法很容易,例如:
public static <E> E addTo(Collection<? super E> coll, E elem) {
coll.add(elem);
return elem;
}
但是在 JavaSE、Commons Collections、Guava 或其他一些“标准”库中真的没有类似的东西吗?
【问题讨论】:
-
番石榴永远不会成为这样的“帮手”。公地,也许吧。
-
@shmosel:我同意,但也许番石榴可以有不同的形式,例如作为一个包装器,类似于他们的 FluentIterable。
-
尝试同时做两件事不是一个坏习惯吗?一个名为 addToCollectionAndReturnValue 的方法对我来说并不合适。当您在这篇文章中编写解决方案时,我也不明白您为什么要为此寻找“标准”解决方案。
-
@Wesley:我确实看到了一些缺点,但个人认为这不是一个坏习惯,因为它避免了每次都写两行,创建大量局部变量,这很容易导致错误和难以阅读的代码。还要考虑一下,比如java.util.Map也有一个fluent方法“V put(K key, V value)”。
-
通常人们要求的是返回集合的东西,所以可以像
coll.add(a).add(b).add(c);这样链接调用。另请注意,Map.put()返回的是 previous 值,而不是参数。
标签: java collections guava apache-commons