- - PR -
iteratorの中で、iteratorで回す方法
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-09-01 09:54
抜けてたのが補完されたなら、ループは最初に投稿された アルゴリズムのままだったら、それで、当初の期待通りの動作を するのではないでしょうか。 (なぜ、ループのアルゴリズムまで入れ替えられてしまったのか、わかんないんですが) あと、ろっぷす様はじめ、他の方々が指摘されているとおり、 reqInfoとresInfoに、コードで拘束できていない依存関係がありますね。 こんな風にできた方がいいんじゃないでしょうか。
entryはクラスじゃなくても、2項の配列でもいいし。 | ||||||||
|
投稿日時: 2004-09-01 12:29
永井です。
手抜きで短く書いたら混乱を招いてしまったようなので、今回はもうちょっと丁寧に書きます。
まずIteratorに関してですが。 「何らかの走査基準にしたがってCollection内の全ての要素を一回ずつ取り出すためのインターフェース」というのが私の認識です。 どんな順番で取り出すかは各Iteratorの実装次第と考えています。 ……と、いきなり本筋から外れてしまいました。 さて、前の投稿で私が書いた「indexで回す」の意味ですが、ちょま吉さんがコード例を書かれている通りの意図です。 最初にbanbooさんが投稿された内容なんですが「Listで扱ってる」「A[1], B[1], A[2], B[2] ...の順でアクセスしたい」と解釈しましたので、それを簡単に実現する方法ということでちょま吉さんのコードと同様なものを念頭に置いて回答させていただきました。 きちんと直すのでしたら、ろっぷすさん、Edossonさんが指摘されている通り、データ構造の見直しを行うことが望ましいです。 | ||||||||
|
投稿日時: 2004-09-01 12:54
>あと、ろっぷす様はじめ、他の方々が指摘されているとおり、
>reqInfoとresInfoに、コードで拘束できていない依存関係がありますね。 >こんな風にできた方がいいんじゃないでしょうか。 ResultMessage result = new ResultMessage(); result.add(resInfo1, reqInfo1); result.add(resInfo2, reqInfo2); Iterator it = result.iteretor(); while(it.hasNext()){ MyEntry entry = (MyEntry)it.next(); RequestInfo req = entry.getRequest(); ResponseInfo res = entry.getResponse(); ................ } たくさんのアドバイスを有難う御座いました。 上記のコードが私の行おうとしている事を実現する アルゴリズムに近いので是非参考にさせて頂きます。 | ||||||||
|
投稿日時: 2004-09-01 14:40
>ResultMessageにはRequestInfoとResponseInfoのリストではなく
>オブジェクトを格納し、ResultMessageをリストに格納した方がシンプル >ではないでしょうか? 皆様に頂いたアドバイスを自分なりに解釈し、クラスのデータ構造を 見直しました。最終的なコードは以下になります。 import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class TestIterator5 { private static List ResultMsgList = new ArrayList(); public static void main(String[] args) { RequestInfo reqInfo1 = new RequestInfo(); ResponseInfo resInfo1 = new ResponseInfo(); RequestInfo reqInfo2 = new RequestInfo(); ResponseInfo resInfo2 = new ResponseInfo(); //値設定 reqInfo1.setId("01"); reqInfo1.setIpAddress("192.168.0.1"); reqInfo1.setName("taro"); resInfo1.setResult("OK"); reqInfo2.setId("02"); reqInfo2.setIpAddress("192.168.0.2"); reqInfo2.setName("jiro"); resInfo2.setResult("NG"); //---------------------- ResultMessage result1 = new ResultMessage(); ResultMessage result2 = new ResultMessage(); result1.add(reqInfo1, resInfo1); result2.add(reqInfo2, resInfo2); ResultMsgList.add(result1); ResultMsgList.add(result2); Iterator it = ResultMsgList.iterator(); while (it.hasNext()) { ResultMessage entry = (ResultMessage) it.next(); RequestInfo req = entry.getRequest(); ResponseInfo res = entry.getResponse(); //値取得 String id = req.getId(); System.out.println("id = " + id); String ipAddress = req.getIpAddress(); System.out.println("ipAddress = " + ipAddress); String name = req.getName(); System.out.println("name = " + name); String resResult = res.getResult(); System.out.println("resResult = " + resResult); System.out.println("-------------------------------"); } } } public class ResultMessage { private RequestInfo reqInfo = new RequestInfo(); private ResponseInfo resInfo = new ResponseInfo(); public void add(RequestInfo req, ResponseInfo res) { reqInfo = req; resInfo = res; } /** * @return */ public RequestInfo getRequest() { // TODO 自動生成されたメソッド・スタブ return reqInfo; } /** * @return */ public ResponseInfo getResponse() { // TODO 自動生成されたメソッド・スタブ return resInfo; } } public class ResponseInfo { private String result; /** * @return */ public String getResult() { return result; } /** * @param string */ public void setResult(String string) { result = string; } } public class RequestInfo { private String id; private String ipAddress; private String name; /** * @return */ public String getId() { return id; } /** * @param string */ public void setId(String string) { id = string; } /** * @return */ public String getIpAddress() { return ipAddress; } /** * @return */ public String getName() { return name; } /** * @param string */ public void setIpAddress(String string) { ipAddress = string; } /** * @param string */ public void setName(String string) { name = string; } } | ||||||||
