呉精益:
これは、匿名クラスのように見えます。私はラムダのこの使用方法についての記事の話を見つけることができませんでした。
public Supplier<Map<Boolean, List<Integer>>> supplier() {
return () -> new HashMap<>() { //todo what does this mean?
{
this.put(false, new ArrayList<>());
this.put(true, new ArrayList<>());
}
};
}
ジェスパー:
ここで起こって異なるものがいくつかあります。
メソッドを返しますSupplier<Map<...>>
。ラムダ式は、() -> new HashMap<>() ...
インタフェースのインスタンスを返しSupplier
返しますHashMap
。
また、平野を返しませんHashMap
。匿名のサブクラスは、HashMap
あるため、外側のここで作成されています{ ... }
。
内側は、{ ... }
あるブロックイニシャライザインスタンスにものを置くために使用されるHashMap
(キーを持つ2つのエントリtrue
とfalse
、各AN ArrayList
値として)。
これは、使用しているダブルブレースの初期化のトリックを。(私はそのトリックを嫌う理由を説明し、私が書いたブログ投稿へのリンクが指しています)。
ダブルブレースの初期化のトリックを使用していない(あなたがJavaの9以降を使用している場合)、これを書くためのより良い方法は、このようなものです:
public Supplier<Map<Boolean, List<Integer>>> supplier() {
return () -> Map.of(
false, new ArrayList<>(),
true, new ArrayList<>());
}