ホームページ > Java > &#&チュートリアル > Java リストをマップに効率的に変換するにはどうすればよいですか?

Java リストをマップに効率的に変換するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-30 02:53:11
オリジナル
516 人が閲覧しました

How Can I Efficiently Convert a Java List to a Map?

Java でリストをマップに変換する方法: 最適なアプローチ

Java でリストをマップに変換するのは一般的なタスクです。さまざまな方法で達成できます。 1 つのアプローチは、リストを反復処理してマップを手動で設定することです。ただし、組み込み Java 機能を使用してこの変換を実行する、より効率的な方法があります。

ストリームベースのアプローチ (Java 8 以降)

Java 8 では、 Stream API は、リストをマップに変換するための簡潔でパフォーマンスの高い方法を提供します。このアプローチでは、Collectors.toMap() メソッドを利用します。

Map<Integer, String> map = 
    list.stream().collect(Collectors.toMap(Item::getKey, item -> item));
ログイン後にコピー

ここで、Item::getKey ラムダ関数はリスト内の各要素のキーを取得します。一方、項目 -​​> item lambda は値を取得します。

ループを使用した手動アプローチ

Java 8 より前のバージョンの場合、またはストリーミングが適切でない場合は、手動アプローチを使用できます。

List<Object[]> results;
Map<Integer, String> resultsMap = new HashMap<>();
for (Object[] o : results) {
    resultsMap.put((Integer) o[0], (String) o[1]);
}
ログイン後にコピー

このアプローチには、リストを反復処理し、キーと値のペアを手動で抽出することが含まれますが、これは、ストリームベースのアプローチ。

非全単射関数に二項演算子を使用する

マッピング関数が全単射でない場合 (つまり、複数の値が同じキーにマッピングできる) )、二項演算子を使用して重複したキー値をマージできます。たとえば、各一意のキーの値の合計を見つけたい場合:

Map<String, Integer> map = 
    intList.stream().collect(toMap(i -> String.valueOf(i % 3), 
                                   i -> i, 
                                   Integer::sum));
ログイン後にコピー

ここで、二項演算子 Integer::sum は、重複するキー値をマージするためのロジックを提供します。

結論

リストをマップに変換するための最適なアプローチは特定の要件によって異なりますが、効率性と簡潔性を考慮して、Collectors.toMap() を使用した Stream API をお勧めします。手動によるアプローチは、古いバージョンの Java またはストリーミングが適用できない場合に使用できます。

以上がJava リストをマップに効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート