如何保证Java集合

时间:2012-06-21 14:54:19

标签: java apache-commons

我想找到像Apache Commons这样的API,它可以轻松地返回一个集合。

目的是生成在收集迭代之前不需要NPE检查或CollectionUtils.isNotEmpty检查的代码。代码中的假设是始终保证列表实例,从而消除每次集合迭代的代码复杂性。

这是一个方法的示例,但我想要一个API,而不是自己滚动。

private List<Account> emptyCollection(
        List<Account> requestedAccounts) {
    if (CollectionUtils.isNotEmpty(requestedAccounts)) {
        return requestedAccounts;
    } else {
        return new ArrayList<Account>();
    }
} 

我想找到一个可以普遍用于任何类的通用API /方法。

以下是我在公共场所的一些研究课程,可以帮助我做到这一点。 http://commons.apache.org/collections/apidocs/org/apache/commons/collections/TransformerUtils.html

http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html

也许.collect可能使用变压器。

我也愿意使用替代API。

2 个答案:

答案 0 :(得分:3)

这是你的意思吗?

public static <T> List<T> nullToEmpty(List<T> list) {
    if (list != null) {
        return list;
    }

    return Collections.emptyList();
}

答案 1 :(得分:0)

你的问题有点难以理解,你只是想避免NPE,还是想避免CollectionUtil.isNotEmpty? 第一个非常简单,第二个不是这样,因为您基本上希望保证您的API将始终返回至少包含一个元素的Collection。 这是一个以业务为中心的约束IMO,而不是通过API合同可以保证的。

如果你想要避免的只是NPE,你可以使用java.lang.Collections.EMPTY_(SET | MAP | LIST)类。但请注意,这些是不可变的,即调用代码,不能将对象添加到以这种方式返回的集合中。如果您希望调用代码改变Collection(即添加/删除/更新元素),那么您将必须返回LIST | MAP | SET等的零元素具体实现。