- - PR -
[Jakarta Commons-Collections] CollectionUtilsのpredicatedCollectionメソッドについて
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2003-09-06 08:27
Jakarta CommonsのCollectionsコンポーネントのCollectionUtilsクラスについて教えてください。
1.下記のようなプログラムを実行したところ、 下記のエラーメッセージが表示され実行できませんでした。 エラーの原因はなんのでしょうか? predicatedCollectionメソッドをselectメソッドに置き換えた場合は 問題なく実行できました。 2.また、predicatedCollectionメソッドとselectメソッドの処理の違いがわかりません。 public static Collection predicatedCollection(Collection collection, Predicate predicate); public static Collection select(Collection inputCollection, Predicate predicate); ※引数のCollectionがnullだった場合、スローされるExceptionが異なるという違いはあるようなのですが。。。 [プログラムの一部] Number[] numbers = new Number[]{new Integer(5), new Integer(-1), new Integer(10), new Integer(-5)}; List list = new ArrayList(); CollectionUtils.addAll(list, numbers); // 値が負であるオブジェクトだけを抽出する (*1)Collection collection = CollectionUtils.predicatedCollection(list, new Predicate() { public boolean evaluate(Object input) { int value = ((Number)input).intValue(); return (value < 0); } }); [実行時のエラーメッセージ] java.lang.IllegalArgumentException: Cannot add Object - Predicate rejected it at org.apache.commons.collections.CollectionUtils$PredicatedCollection.v alidate(Unknown Source) at org.apache.commons.collections.CollectionUtils$PredicatedCollection.< init>(Unknown Source) at org.apache.commons.collections.CollectionUtils.predicatedCollection(U nknown Source) [環境] Windows XP Java2 v1.4.2 Jakarta Commons Collectionsコンポーネント v2.1 よろしくお願いします。 |
|
投稿日時: 2003-09-06 11:12
Javadocを見ても良く分からなかったので、ソースを見てみました。evaluateでfalseが
返されるとエラーになるようですね。要するにこのメソッドは、Predicateで設定された 条件を満たすオブジェクトのみ追加できるコレクションを生成するようです。そのために 生成時にもチェックをかけているわけですね。 |
|
投稿日時: 2003-09-06 11:43
> 要するにこのメソッドは、Predicateで設定された
> 条件を満たすオブジェクトのみ追加できるコレクションを生成するようです。 > そのために生成時にもチェックをかけているわけですね。 なるほど! 簡単なプログラムで実験してみたところ、おっしゃる通りの 動きをしました。 predicatedCollectionメソッドの返したCollectionオブジェクトに 、Predicateで設定された条件を満たさないオブジェクトを 追加しようとすると、IllegalArgumentExceptionがスローされました。 とってもすっきりしました(笑)。 ありがとうございました。 |
1
