1. ホーム
  2. java

[解決済み] Java 8では、ラムダを使用してMap<K,V>を別のMap<K,V>に変換するにはどうすればよいですか?

2022-04-23 02:13:50

質問

私はちょうどJava 8を見始め、ラムダを試すために、私が最近書いた非常に単純なものを書き換えてみようと思いました。 私はString to ColumnのMapをString to Columnの別のMapに変える必要があり、新しいMapのColumnは最初のMapのColumnの防御コピーである。 Columnはコピーコンストラクタを持っています。 今のところ、最も近いものは次の通りだ。

    Map<String, Column> newColumnMap= new HashMap<>();
    originalColumnMap.entrySet().stream().forEach(x -> newColumnMap.put(x.getKey(), new Column(x.getValue())));

が、もっと素敵な方法があるはずなので、アドバイスをいただけるとありがたいです。

どのように解決するのですか?

を使用することができます。 コレクター :

import java.util.*;
import java.util.stream.Collectors;

public class Defensive {

  public static void main(String[] args) {
    Map<String, Column> original = new HashMap<>();
    original.put("foo", new Column());
    original.put("bar", new Column());

    Map<String, Column> copy = original.entrySet()
        .stream()
        .collect(Collectors.toMap(Map.Entry::getKey,
                                  e -> new Column(e.getValue())));

    System.out.println(original);
    System.out.println(copy);
  }

  static class Column {
    public Column() {}
    public Column(Column c) {}
  }
}