2008/05/19

Mapを拡張forループでぶんまわす [ Java ]

ものすごい更新が空いてしまった……
基本的にものぐさなんでよくない傾向です。
そして左肩が痛い。もう四十肩ですかね?
一応25歳なんですけど……まぁいいや。

今日は先日紹介した拡張forループ文を使ってMapをループ
する方法です。

基本的にMapを作る時ってKey値を指定してValueを取得する事が
多いと思うんですが、場合によってはMapの値を全てを取得したい
って事もあると思います。そんな時は下記のように拡張forループを使います。

Map classMate = new LinkedHashMap();

classMate.add("01", "佐藤");
classMate.add("02", "田中");
classMate.add("03", "高橋");
classMate.add("04", "鈴木");

for(Map.Entry person : classMate.entrySet()){
System.out.println(person.getKey());
System.out.println(person.getValue());
}

上記のように書く事で、01佐藤02田中03高橋04鈴木 のように出力されます。
簡単ですね。ポイントは

(マップ名).entrySet()

とする事でエントリのSet(Collectionを継承している)を取得する所。
もう一つのポイントは

Map.Entry<(型名), (型名)> とする事でエントリの型を指定する所かな?

知らないでも特に不自由しないけど、知ってると何かで役立つような情報でした。

2008/05/07

拡張forループ~素晴らしきJDK5~ [ Java, JDK5 ]

GWがあったので更新が長らく止まってました。
さて、今日はJDK5から新しく追加された機能、
拡張forループです。

今までJavaでfor文を使う場合、以下のように
コードを書いていたと思われます。

1.配列のループ

int[] array=new int[100];
for ( int i = 0; i < array.length; i++ ) {
  // 何らかの処理
}
2 .コレクションのループ(Iteratorの使用)

List persons;

for (Iterator it = persons.iterator(); it.hasNext(); ) {
 Person person = (Person)it.next();
// 何らかの処理
}

こんな感じでしょうか?相変わらず実際にコンパイルしてないので通るか不安……
さて、ここでJDK5で新登場した拡張forループの使い方です!!

3.拡張forループ
int[] array=new int[100];
for(int i : array){
 //何らかの処理
}

これだけ。なんとまー楽になった事か。具体的に説明するとこうなります。

for([変数の型] [ループ内で使う変数名] : [配列、又はコレクションの変数名]){
 //処理
}

例えば、stringListという名前の、String型のListが存在したとします。その場合

for(String str : stringList){
 System.out.println(str);
}

こんな感じになります。
とりあえず覚えておくと(JDK5を使うなら)何かと便利(というか作業効率が上がる)
なので是非是非。