JavaでMapを繰り返します
1概要
このクイック記事では、JavaのMapのエントリを反復処理するさまざまな方法について説明します。
簡単に言うと、
keySet()、valueSet()
、または
entrySet()
を使用してMapの内容を抽出できます。これらはすべて集合なので、同様の反復原則がそれらすべてに適用されます。
entry.getKey()
はキーを返し、
entry.getValue()
は対応する値を返します。これらのいくつかを見てみましょう。
===
2
EntrySet
と
For Loop
まず、
Entry
_
Set
を使用して
Map
を反復処理する方法を見てみましょう:
_
public void iterateUsingEntrySet(Map<String, Integer> map) { for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue()); } }
ここでは、マップを一連のエントリに変換してから、従来のfor-eachアプローチを使用してそれらを繰り返します。
getKey()
を呼び出すことで各エントリのキーにアクセスでき、__getValue()を呼び出すことで各エントリの値にアクセスできます。===
3
Iterator
と
EntrySet
もう1つの方法は、一連のエントリを取得し、__Iteratorを使用して反復を実行することです。
public void iterateUsingIteratorAndEntry(Map<String, Integer> map) { Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, Integer> entry = iterator.next(); System.out.println(entry.getKey() + ":" + entry.getValue()); } }
entrySet()の
iterator()
APIを使用して
Iterator
インスタンスを取得する方法に注意してください。次に、通常どおり
iterator.next().__を使用して反復子をループ処理します。===
4ラムダ付き
それでは、
λ式を使用して
Map__を反復する方法を見てみましょう。Java 8の他のほとんどのものと同様に、これは他のものよりもずっと単純であることがわかります。
forEach()
メソッドを使用します。public void iterateUsingLambda(Map<String, Integer> map) { map.forEach((k, v) -> System.out.println((k + ":" + v))); }
この場合、マップを一連のエントリに変換する必要はありません。ラムダ式の詳細については、リンクすることができます:/java-8-lambda-expressions-tips[ここから始めてください]。
===
5
Stream
API
Stream
APIは、
Java 8
の主な機能の1つです。この機能を使用して
Map
をループ処理することもできますが、前の例と同様に、最初に一連のエントリを取得する必要があります。public void iterateUsingStreamAPI(Map<String, Integer> map) { map.entrySet().stream() //... .forEach(e -> System.out.println(e.getKey() + ":" + e.getValue())); }
これは追加の
Stream
処理をすることを計画しているときに使われるべきです。それ以外の場合は、前述のように単なる
forEach()
です。
Stream
APIの詳細については、リンク:/java-8-streamsを参照してください。===
6. 結論
このチュートリアルでは、単純だが重要な操作、つまりマップのエントリを繰り返す操作に焦点を当てました。
Java 8でのみ使用できる2つのメソッド、つまりLambda式と
Stream
APIを見ました。いつものように、この記事のコード例はhttps://github.com/eugenp/tutorials/tree/master/java-collections-maps[GitHubについて]で見つけることができます。