我有一个列表,有时可能为null,返回类型应该是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()
,如果它为null,它会返回0,如果它不为null,则返回大小,那么你可以简单地删除该方法,并更新所有调用它的地方,使其成为调用该方法的新方式。
您可以使用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对象)返回以下内容:
指定集合的大小,如果对象为空则为0
它处理以下内容:
- 集合-集合大小
- 地图-地图大小
- 数组-数组大小
- Iterator-迭代器中剩余的元素数
- 枚举-枚举中剩余的元素数
就我个人而言,我希望参数类型至少是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);