Javaでマップを反復処理する
1. 概要
この簡単な記事では、Javaでマップのエントリを反復処理するさまざまな方法を見ていきます。
簡単に言えば、keySet(), valueSet()またはentrySet()を使用してマップのコンテンツを抽出できます。 これらはすべてセットであるため、同様の反復原理がすべてに適用されます。
The Map.entrySet [.s1] #APIは、要素がMapクラスからのものであるマップのコレクションビューを返します。 The only way to obtain a reference to a single map entry is from the iterator of this collection view.#
Theentry.getKey()はキーを返し、entry.getValue()は対応する値を返します。
これらのいくつかを見てみましょう。
2. EntrySetおよびFor Loop
まず、iterate through a Map using the Entry*Set*:の方法を見てみましょう
public void iterateUsingEntrySet(Map map) {
for (Map.Entry entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
ここでは、マップを一連のエントリに変換し、従来のfor-eachアプローチを使用してそれらを反復処理しています。
getKey()を呼び出すことで各エントリのキーにアクセスでき、getValue().を呼び出すことで各エントリの値にアクセスできます。
3. IteratorおよびEntrySet
別のアプローチは、エントリのセットを取得し、Iterator:を使用して反復を実行することです。
public void iterateUsingIteratorAndEntry(Map map) {
Iterator> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = iterator.next();
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
entrySet().のiterator() APIを使用してIteratorインスタンスを取得する方法に注目してください。次に、通常どおり、iterator.next().を使用してイテレータをループします。
4. ラムダと
ここで、lambda式を使用してMapを反復する方法を見てみましょう。
Java 8の他のほとんどのものと同様に、これは他の方法よりもはるかに単純であることがわかります。 forEach()メソッドを利用します。
public void iterateUsingLambda(Map map) {
map.forEach((k, v) -> System.out.println((k + ":" + v)));
}
この場合、マップをエントリのセットに変換する必要はありません。 ラムダ式の詳細については、start hereを使用できます。
5. Stream API
Stream APIは、Java 8の主な機能の1つです。 この機能を使用してMapをループすることもできますが、前の例と同様に、最初に一連のエントリを取得する必要があります。
public void iterateUsingStreamAPI(Map map) {
map.entrySet().stream()
// ...
.forEach(e -> System.out.println(e.getKey() + ":" + e.getValue()));
}
これは、追加のStream処理を計画しているときに使用する必要があります。 それ以外の場合は、前述のように単純なforEach()です。
Stream APIの詳細については、this articleを確認してください。
6. 結論
このチュートリアルでは、マップのエントリを反復処理するという、シンプルでありながら重要な操作に焦点を当てました。
Java 8でのみ使用できるメソッド、つまりLambda式とStreamAPIをいくつか見てきました。
いつものように、記事のコード例はover on GitHubにあります。