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

Java 8 ストリームを使用してリストをマップに効率的に変換するにはどうすればよいですか?

DDD
リリース: 2024-12-28 13:16:10
オリジナル
520 人が閲覧しました

How Can I Efficiently Translate Lists to Maps Using Java 8 Streams?

Java 8 ストリームを使用した効率的なリストからマップへの変換

Java 8 では、ストリームとラムダを使用してオブジェクトのリストをマップに変換するのが一般的なタスクです。これは、目的の動作や Guava などのサードパーティ ライブラリの可用性に応じて、さまざまな方法で実現できます。

Java 7 以前のアプローチ

従来、マッピングマップへのリストには手動の反復と手書きのループが含まれます:

private Map<String, Choice> nameMap(List<Choice> choices) {
    final Map<String, Choice> hashMap = new HashMap<>();
    for (final Choice choice : choices) {
        hashMap.put(choice.getName(), choice);
    }

    return hashMap;
}
ログイン後にコピー

Guava ベースソリューション

Guava は、指定されたキー抽出子に基づいてリストからマップを生成するための便利なメソッド Maps.uniqueIndex を提供します。

Java 7 を使用した Guava

private Map<String, Choice> nameMap(List<Choice> choices) {
    return Maps.uniqueIndex(choices, new Function<Choice, String>() {

        @Override
        public String apply(final Choice input) {
            return input.getName();
        }

    });
}
ログイン後にコピー

Java 8 を使用したグアバLambdas

Java 8 ラムダを利用すると、コードがさらに簡素化されます。

private Map<String, Choice> nameMap(List<Choice> choices) {
    return Maps.uniqueIndex(choices, Choice::getName);
}
ログイン後にコピー

Collectors to the Rescue

Java 8 の Collectors クラスが提供するものリストをマップにマッピングするための堅牢な実装。 toMap コレクターは 2 つの引数を取ります。

  • キー抽出関数 (各要素のキーを取得する関数)
  • 値抽出関数 (各要素の値を取得する関数) element)

この場合、Choice::getName と Function.identity() を使用してキーと値を取得できます。それぞれ:

Map<String, Choice> result =
    choices.stream().collect(Collectors.toMap(Choice::getName,
                                              Function.identity()));
ログイン後にコピー

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

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