【发布时间】:2010-10-24 04:28:46
【问题描述】:
如果您尝试添加的内容与谓词不匹配,Apache Commons Collections 中是否有办法拥有一个不会引发 IllegalArgumentException 的 PredicatedList(或类似的)?如果不匹配,它将忽略将项目添加到列表的请求。
例如,如果我这样做:
List predicatedList = ListUtils.predicatedList(new ArrayList(), PredicateUtils.notNullPredicate());
...
predicatedList.add(null); // throws an IllegalArgumentException
我希望能够执行上述操作,但添加的 null 会被忽略,不会引发异常。
我无法从 JavaDocs 中确定 Commons Collections 是否支持这一点。如果可能的话,我想在不滚动我自己的代码的情况下这样做。
【问题讨论】:
-
这不是谓词列表的要点,即您只想要列表中符合为其定义的条件的东西吗?为什么不直接使用普通列表?
-
是的,它是谓词列表的点。但我希望它安静地忽略与谓词不匹配的事物,即进行谓词检查,但如果不匹配则不要抱怨。
-
这在逻辑上与普通列表的行为相同,因为您不关心通知您元素未通过的谓词检查。
-
不,不一样。您可以根据需要多次将 null 添加到标准 ArrayList。它们作为单独的元素进入。 “l.add(null); l.add(null); l.size();”也是如此。 l.size() 将返回 2。我不希望将空值添加到列表中,因此我想使用 PredicatedList 之类的东西。
-
你完全错过了我想要表达的观点。我不希望列表中有空值,因此我查看了 PredicatedList。我不想在所有使用该列表的地方进行空检查。我想传递对可能添加到列表中的不同内容的引用。如果这些地方尝试添加 null,我想忽略该添加。但是我不想强迫到处去捕捉如果我使用 PredicatedList 会得到的 IllegalArgumentException。所以我想要 PredicatedList 的功能,但不会抛出异常,而不必自己动手!
标签: java api collections apache-commons