[解決済み] Collectors.toMap() keyMapper -- より簡潔な表現?
2022-03-02 02:17:06
質問
以下の関数パラメータについて、より簡潔な表現を考えています。
Collectors.toMap()
を呼び出します。
List<Person> roster = ...;
Map<String, Person> map =
roster
.stream()
.collect(
Collectors.toMap(
new Function<Person, String>() {
public String apply(Person p) { return p.getLast(); }
},
Function.<Person>identity()));
ラムダ式を使ってインライン化すればよさそうなものですが、コンパイルできるものが思いつきません。(私はラムダを使うのはかなり初めてなので、これはあまり驚きではありません)。
ありがとうございます。
-->更新しました。
受付回答にもあるように
Person::getLast
は私が探していたものであり、私が試したものです。しかし、Eclipse 4.3のBETA_8ナイトリービルドが問題でした -- それは間違っているとフラグを立てました。コマンドラインからコンパイルすると(投稿する前に行うべきでした)、それは動作しました。だから、eclipse.orgにバグを報告する時が来た。
ありがとうございます。
解決方法は?
ラムダを使えばいいんです。
Collectors.toMap(p -> p.getLast(), Function.identity())
または、もっと簡潔に言うと
メソッドリファレンス
を使って
::
:
Collectors.toMap(Person::getLast, Function.identity())
の代わりに
Function.identity
というように、単純に同等のラムダを使用することができます。
Collectors.toMap(Person::getLast, p -> p)
Netbeansを使用している場合、匿名クラスがラムダで置き換えられるときはいつでもヒントを得ることができます。
関連
-
[解決済み] 1行目2列目でBEGIN_ARRAYを期待したが、BEGIN_OBJECTだった。
-
[解決済み] 文字列の長さに応じて文字列をトリミングする
-
[解決済み] .lengthが解決できない、またはフィールドでない
-
[解決済み] ラムダ式からプロパティ名を取得する
-
[解決済み】C++11のラムダ式って何?
-
[解決済み】なぜFunc<T>ではなくExpression<Func<T>を使うのですか?
-
[解決済み】Collectors.toMapでNullPointerExceptionが発生する。
-
[解決済み】ラムダ式は、実行されるたびにヒープ上にオブジェクトを作成するのか?
-
[解決済み] javaのラムダは1つ以上のパラメータを持つことができますか?
-
[解決済み] ラムダ式を使って要素が存在するかどうかをチェックするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] プロトコルハンドラの初期化に失敗しました。
-
[解決済み] Eclipse- Dynamic Web Module 3.0 で新しいプロジェクトを作成するときに Java 1.6 以降が必要なエラーが発生する。
-
[解決済み] Java の条件付きコンパイル:コードチャンクをコンパイルしないようにするには?
-
[解決済み] mavenのコンパイルに失敗するのはなぜですか?
-
[解決済み] ファイルを作成せずに、ファイルが存在するかどうかをチェックする
-
[解決済み] Apache Camelのログに簡単なテキストを記録する
-
[解決済み] Mavenです。JARは空になります - 含有するためにマークされたコンテンツがありません
-
[解決済み] publicId と systemId の間に空白が必要です。
-
[解決済み] IntegerからBigIntegerへの変換
-
[解決済み】Collectors.toMapでNullPointerExceptionが発生する。