JDK8streamリストMapオブジェクトのエラーを向けるだろうjava.lang.IllegalStateExcep

0cicg9AFzaC

そのようなラムダ式、関数とそれを置くために、ストリームプログラミングの流れ、これらの新機能の使用などの新機能、のJDK8ロットは、使用後に、そのようなセットリストとマップオブジェクトによってストリームに直接変換することができます。

構文:

地図マップ= list.stream.stream()コレクト(Collectors.toMap(リスト::コレクションのプロパティでオブジェクトを取得し、リストがエイリアスである - >リスト)の別名です)。

例:

地図<整数、EmployeeTeacherCertificate> employeeTeacherCertificateMap = employeeTeacherCertificates.stream()コレクト(Collectors.toMap(EmployeeTeacherCertificate :: getEmployeeId、cert-> CERT));

説明:

employeeTeacherCertificatesリストコレクションオブジェクト

EmployeeTeacherCertificate:リストオブジェクトのコレクションです

それは非常に簡単ではありません。

例えば、二重にリストをEMPIDしかし、もし、それがエラーになります。次のとおりです。

0cicgbKFzrE

エラーメッセージと言って、社員=値4429は、コレクションに反復されます。

この時間は、どのようにそれを解決するには?

私たちは、オーバーロードの別の方法のtoMapを使用することができます。と重量の方法。

構文:

Collectors.toMap(keyMapper、valueMapper、mergeFunction)

出典:

0cicglQYzZY

パラメータ:

最初の2つのパラメータは、第三パラメータが鍵の複製、以下の説明ノートの処理方法で得られたキーと値の属性値が、前と同じです。

0cicgXXmh6m

簡単に言えば:

解決の競合に、機能をマージすると、{@link地図#マージ(オブジェクト、オブジェクト、BiFunction)}にその間関連同じキー値を提供します。

合成関数は、2つのパラメータ、現在の反復の前にキーに対応する第1のパラメータ値、データ電流の電流値に対する第2の繰り返しキーを有しています。

図1に示すように、前回値を用いて繰り返したときに値バックカバー

また、それは次のように省略することができます。

地図<文字列、文字列>マップ= list.stream()。コレクト(

Collectors.toMap(学生:: getClassNameメソッド、学生:: getStudentName、

(KEY1、KEY2) - > KEY2))。

また、それは次のように省略することができます。

地図<文字列、文字列>マップ= list.stream()。コレクト(

Collectors.toMap(学生:: getClassNameメソッド、学生:: getStudentName、

(値1、値2) - > {

戻り値2;

}))。

カイコーは、ここに2番目のオプションを使用します。

0cicgLapQv2

第2のシンプルで理解しやすいです。

最後に、それを要約します。

要約:

これらの措置は、toMapオーバーロード第三引数に基づいて実装されています!最適な方法として、私たちは、特定の事業に依存すべきだと思います!

為替と一緒に学ぶことを歓迎します。カイコーのJava


おすすめ

転載: blog.51cto.com/kaigejava/2459174
おすすめ