2016-03-30 11 views
7

Collectors.toMapコールを使用してリストをマップに変換しようとしています。リストはActivityReconcileオブジェクトで構成されています。リスト内のすべてのエントリのインスタンスをtoMap呼び出しに渡したいとします。java 8リストのインスタンスを使用してマップするリストを変更する

コードは以下のとおりです。インスタンスが必要な場所は??で示されます。

final List<ActivityReconcile> activePostedList = loader.loadActivePosted(accessToken); 
Map<AccountTransactionKey, ActivityReconcile> postedActiveMap = 
activePostedList.stream().collect(
Collectors.toMap(
AccountTransactionKey.createNewAccountTransactionKeyFromActivityReconcileRecord(??),??)); 
+0

※私の質問は不明です。あなたはどうしたらいいですか? –

+1

Mapはkeyとvalueの2つの引数をとります。では、期待される出力マップのキーと価値は何ですか? –

+1

'toMap(Function <?super T、?extends K> keyMapper、Function <?super T ,? extends U> valueMapper)このメソッドは2つの引数をとります。どのように鍵や価値を決定するかを提案しますか? 男、そのメソッド名を見てください! 'createNewAccountTransactionKeyFromActivityReconcileRecord' –

答えて

4

私が正しくあなたを理解している場合、あなたは

Map<AccountTransactionKey, ActivityReconcile> result = choices 
       .stream() 
       .collect(Collectors.toMap(
         AccountTransactionKey::generate, 
         Function.identity())); 

ようなものが必要になり、(AccountTransactionKeyクラスの)メソッドは、私が交換してきた

public static AccountTransactionKey generate(ActivityReconcile reconcile) {...} 

のようになります。 createNewAccountTransactionKeyFromActivityReconcileRecによってgenerate答えをより読みやすく分かりやすくするためです。

activePostedList.stream().collect(Collectors.toMap(
    ar -> AccountTransactionKey.createNewAccountTransactionKeyFromActivityReconcileRecord(ar)), 
    o -> o)); 

またはメソッド参照を使用します:

3

ラムダパラメータを追加、少なくとも変更であなたのコードを「修正」するためにところで

activePostedList.stream().collect(Collectors.toMap(
    AccountTransactionKey::createNewAccountTransactionKeyFromActivityReconcileRecord, o -> o)); 

を、私は見て今までに思い出すことができませんメソッド名がcreateNewAccountTransactionKeyFromActivityReconcileRecordの場合 - 可読性のため、戻り値の型とパラメータの型が他のファクトリメソッドと区別するのに十分であるため、それを単にcreate()に減らすことを検討してください。

関連する問題