- PR -

[Jakarta Commons-Collections] CollectionUtilsのpredicatedCollectionメソッドについて

1
投稿者投稿内容
きよ
常連さん
会議室デビュー日: 2002/03/27
投稿数: 21
投稿日時: 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

よろしくお願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2003-09-06 11:12
Javadocを見ても良く分からなかったので、ソースを見てみました。evaluateでfalseが
返されるとエラーになるようですね。要するにこのメソッドは、Predicateで設定された
条件を満たすオブジェクトのみ追加できるコレクションを生成するようです。そのために
生成時にもチェックをかけているわけですね。
きよ
常連さん
会議室デビュー日: 2002/03/27
投稿数: 21
投稿日時: 2003-09-06 11:43
> 要するにこのメソッドは、Predicateで設定された
> 条件を満たすオブジェクトのみ追加できるコレクションを生成するようです。
> そのために生成時にもチェックをかけているわけですね。
なるほど!
簡単なプログラムで実験してみたところ、おっしゃる通りの
動きをしました。
predicatedCollectionメソッドの返したCollectionオブジェクトに
、Predicateで設定された条件を満たさないオブジェクトを
追加しようとすると、IllegalArgumentExceptionがスローされました。

とってもすっきりしました(笑)。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)