- PR -

配列から任意の項目を削除する方法について

投稿者投稿内容
ア太郎
常連さん
会議室デビュー日: 2004/02/03
投稿数: 22
投稿日時: 2004-03-12 17:38
自作JavaBeansクラスの配列から任意の位置のObjectを
削除しようと思い、以下のようなコーディングをしました。

TestBean[] tbs = 〜〜〜;
List rtnList = Arrays.asList(tbs);
for(int i=0; i<tbs.length; i++){
 if(ある条件){
  rtnList.remove(i);
 }
}
tbs = (TestBean[])rtnList.toArray();

実際に実行すると、removeするところで
以下のようなExceptionが発生してしまいます。

java.lang.UnsupportedOperationException
 at java.util.AbstractList.remove(AbstractList.java:167)

まったく別のアプローチでもかまわないのですが、
配列から簡単に任意の項目を削除する方法は無いでしょうか?
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2004-03-12 17:56
>まったく別のアプローチでもかまわないのですが、
>配列から簡単に任意の項目を削除する方法は無いでしょうか?

コピーを作り必要な値をコピー 、削除フラグを設けるとか
kit
会議室デビュー日: 2003/02/05
投稿数: 2
投稿日時: 2004-03-12 18:03
ア太郎さんこんにちは。
Arrays#asList()で返されるListオブジェクトはremove()に対応していない為
UnsupportedOperationExceptionが発生していると思われます。
List rtnList = new ArrayList();
rtnList.addAll(Arrays.asList(tbs));
のようにしてはどうでしょうか。
顔爺
ベテラン
会議室デビュー日: 2003/10/03
投稿数: 52
投稿日時: 2004-03-12 18:04
Arrays.asList の返す List が remove メソッドを実装していないからです。
(remove は任意のオペレーション)
この List を remove を実装している ArrayList か LinkedList でラップすれば OK だと思います。
# このエラーについては

ところで、前の質問で「基本的には今までも投稿したところには結果報告も行うように
しています。 」というのはどうなりました?

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=9066&forum=12
でゅうく
大ベテラン
会議室デビュー日: 2003/11/30
投稿数: 129
投稿日時: 2004-03-12 18:12
引用:

kitさんの書き込み (2004-03-12 18:03) より:
List rtnList = new ArrayList();
rtnList.addAll(Arrays.asList(tbs));


ArrayList(Collection c) のコンストラクタがありますよ。

#読みにくい個所を訂正しました。

[ メッセージ編集済み 編集者: でゅうく 編集日時 2004-03-12 18:13 ]
でゅうく
大ベテラン
会議室デビュー日: 2003/11/30
投稿数: 129
投稿日時: 2004-03-12 18:52
ご質問の件は解決されたと思うのですが、下記引用部分は上手くいきましたか?

引用:

ア太郎さんの書き込み (2004-03-12 17:38) より:
tbs = (TestBean[])rtnList.toArray();

ア太郎
常連さん
会議室デビュー日: 2004/02/03
投稿数: 22
投稿日時: 2004-03-13 12:32
みなさん、レスありがとうございます。
皆さんの意見を参考に、以下のような形で解決しました。
改良の余地はまだまだありそうですが、、、

TestBean[] tbs = 〜〜〜;
List rtnList = new ArrayList(Arrays.asList(tbs));
int zure = 0;
for(int i=0; i<tbs.length; i++){
 if(ある条件){
  rtnList.remove(i-zure);
  ++zure; //消すごとにズレが生じるので
 }
}
TestBean[] tbs2 = new TestBean[rtnList.size()];
tbs = (TestBean[])rtnList.toArray(tbs2);


顔爺さん>
前回の質問の結果報告も既に行ってあると思いますが。
TomScissors
ベテラン
会議室デビュー日: 2003/06/05
投稿数: 79
投稿日時: 2004-03-13 13:32
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=9066&forum=12
>ローカルの設定はセキュリティーやパッチだと思われますが、
>よくわかりません。
>何かわかったらご連絡したいと思います。
よく分からないローカル設定とやらはもう放置中?
といいますか、結局うまくいったんですか?
それすら判断できませんが。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=9869&forum=12&3
>Session無効化のタイミングで、
>HttpSessionBindingEventも発生するとは知りませんでした。
>試してみます。
試した結果は?
こちらも結局解決したのか判断できないのですが。

>>Application スコープにユーザ情報ってあまり聞かないのですが
>>よろしければどういう用途か教えていただけませんか?
どういう用途なのかそんなことを説明するつもりはない?


もしかして、アドバイスを受けて、
「分かりましたやってみます」
が結果報告だと思っているのでしょうか・・・?

私の認識ではその「やってみた」結果を報告することが結果報告なのですが^^;
進展しないのならしないで、「結局うまくいきませんでした」になるでしょうし。

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