当サイトは、アフィリエイト広告を利用しています
javaのMapについて調べたことや使い方をまとめる。
streamAPIについては下記の書籍が参考になりました
Mapとはインターフェースであり、実際に使う場合は
Mapインターフェースを実装した下記のクラスからMapインスタンスを作り
使うことになる
などなど...
下記のような形で宣言し、Mapインスタンスを生成する。
// 空のHashMapの場合Map<String, Integer> map = new HashMap<String, Integer>()// 初期値を設定する場合Map<String, Integer> map = new HashMap<String, Integer>() {{ put("c", 1); }{ put("a", 0); }{ put("b", 2); }};
連想配列であり、キーと値をペア(エントリー)で保持するコレクション。
MapインスタンスはMapインターフェースのメソッドを使って操作をする
エントリーとはMap.Entryインスタンスのこと。
つまり上記のmapの中にはMap.Entryインスタンスが格納されているイメージ。
そのためentrySetメソッドでMapから値を取り出し、処理する場合は
Map.Entryインターフェースのメソッドで操作することになる
Mapに対して操作できるメソッドを書いてみる
よく使うパターン。
Mapからkeyを指定して値を取り出す。
import java.util.*;public class Main {public static void main(String[] args) throws Exception {Map<String, Integer> map = new HashMap<String, Integer>() {{ put("c", 1); }{ put("a", 0); }{ put("b", 2); }};// Your code here!System.out.println(map.get("c"));}}
Mapに格納されている内、keyだけをSetで取得する。
ラムダ式で処理をつなげることができる。
※javascriptでいうところのObject.keysメソッドと同じような感じ
import java.util.*;public class Main {public static void main(String[] args) throws Exception {Map<String, Integer> map = new HashMap<String, Integer>() {{ put("c", 1); }{ put("a", 0); }{ put("b", 2); }};<String> keys = map.keySet();System.out.println(keys);// 結果// [a, b, c]// ラムダ式で出力map.keySet().stream().forEach(key->System.out.println(key));// 結果// a// b// c}}
Mapに格納されている内、値だけをCollectionで取得する。
ラムダ式で処理をつなげることができる。
※javascriptでいうところのObject.valuesメソッドと同じ
import java.util.*;public class Main {public static void main(String[] args) throws Exception {Map<String, Integer> map = new HashMap<String, Integer>() {{ put("c", 1); }{ put("a", 0); }{ put("b", 2); }};Collection<Integer> values = map.values();System.out.println(values);// 結果// [0, 2, 1]map.values().stream().forEach(val->System.out.println(val));// 結果// 0// 2// 1}}
Mapに保管されている全要素を、「Map.Entry」クラスのインスタンスをSet
でまとめたものとして取り出す。
ラムダ式で処理をつなげることができる。
※javascriptでいうところのObject.entriesメソッドと同じ
import java.util.*;public class Main {public static void main(String[] args) throws Exception {Map<String, Integer> map = new HashMap<String, Integer>() {{ put("c", 1); }{ put("a", 0); }{ put("b", 2); }};// SetでMap.Entryを取得Set<Map.Entry<String, Integer>> enties = map.entrySet();System.out.println(enties);// 結果// [a=0, b=2, c=1]System.out.println("【for文】");// for文の場合for(Map.Entry<String, Integer>ent : enties){System.out.println(ent);}System.out.println("【forEach】");// steramの場合map.entrySet().stream().forEach(set->System.out.println(set));// 結果// a=0// b=2// c=1}}
ループ内でMap.Entryインスタンスに対しては
Map.Entryインターフェースのメソッドを使うことができる
getKeyメソッドとgetValueメソッドを使ってみる。
import java.util.*;public class Main {public static void main(String[] args) throws Exception {Map<String, Integer> map = new HashMap<String, Integer>() {{ put("c", 1); }{ put("a", 0); }{ put("b", 2); }};// SetでMap.Entryを取得Set<Map.Entry<String, Integer>> enties = map.entrySet();System.out.println(enties);// 結果// [a=0, b=2, c=1]System.out.println("【for文】");// for文の場合for(Map.Entry<String, Integer>ent : enties){System.out.println("key:"+ ent.getKey() + " value:"+ ent.getValue() );}System.out.println("【forEach】");// steramの場合map.entrySet().stream().forEach(set->System.out.println("key:"+ set.getKey() + " value:"+ set.getValue()));// 結果//key:a value:0//key:b value:2//key:c value:1}}
【Java入門】Map(連想配列)のキーと値を取得する方法
コレクション・フレームワーク (4/5)
コレクションクラスとは>
インタフェースMap<K,V>
インタフェースMap.Entry<K,V>