我的列表有时可能为空,返回类型应该是 int ex:
int size = 0;
if(list != null) {
size = list.size;
}
请问是否有可用的实用程序?
谢谢。
那又如何
int size = (list == null) ? 0 : list.size();
我不确定你为什么需要一个实用程序来实现这一点,因为上面的内容看起来很简单。
自己动手,将其放入方法中,最好放在类中。比如:
public class CollectionUtils
{
private CollectionUtils()
{
}
public static getSize(final List<?> list)
{
// I try to make all my variables final, and I have a dislike of the ternary (?:)
// operator...
final int size;
if(list == null)
{
size = 0;
}
else
{
size = list.size();
}
return (size);
}
}
通过将其放入方法中,如果您稍后找到更好的方法来执行此操作,则可以仅在一个位置更新代码。如果语言将来也会以某种方式发生变化,比如
?list.size()
,如果它为空则返回 0,如果它不为空则返回大小,那么你可以简单地删除该方法并更新所有调用它的地方是调用该方法的新方式。
您可以使用 Collections.emptyList() 而不是使用 null 值
这样你就
private List<String> list = Collections.<String>emptyList();
int size = list.size(); // list is never null, but could be an empty list.
org.apache.commons.collections4.CollectionUtils#size(Object object)返回以下内容:
指定集合的大小,如果对象为 null,则为 0
它处理以下内容:
- 集合 - 集合大小
- 地图 - 地图大小
- 数组 - 数组大小
- 迭代器 - 迭代器中剩余的元素数量
- 枚举 - 枚举中剩余的元素数量
就个人而言,我希望参数类型至少是
Collection
而不是 Object
,以增加编译时安全性。因为它可以抛出ff。例外:
IllegalArgumentException - 如果对象无法识别则抛出
在Goole
guava
的帮助下,您可以使用CollectionUtils.size()
功能
import org.apache.commons.collections.CollectionUtils;
// Test case:
// 0
int size = CollectionUtils.size(null);
//2
int size2 = CollectionUtils.size(Lists.newArrayList(2,3));
虽然接受的答案可以说是最好的答案,但我发现一直打字很乏味。我最终写了这两个小实用程序:
static int csize(Collection<?> c) { return c != null ? c.size() : 0; }
static int csize(Map<?> m) { return m != null ? m.size() : 0; }
现在我使用例如:
int size = csize(list);
不是实用程序;另一种方法:可以使用
Optional
。
Optional.ofNullable(inputList)
.orElse(Collections.emptyList())
.size()
注意:
Collection.emptyList()
的java.util
不会创建新的专用列表,适合此用例。
来自文档:
该方法的实现不需要创建单独的List对象 每次通话。使用这种方法的成本可能与 使用类似名称的字段。