2016-06-28 6 views
0

マップのエントリを処理し、結果のストリームを別のマップに収集する方法を理解しています。しかし、以前のマップのキーが渡されたコンストラクタを使用して値を設定する必要があり、その操作方法を理解できません。Java 8ストリーム:マップとコンストラクタへのマップの収集

私はMap<Event, EventSchedule> schedulesを持っている、と私はそれからMap<Event, InverseSchedule>を取得したい:

シナリオは次のようです。 InverseScheduleEventで構成され、正確にはそれぞれのキーはschedulesです。

これは私がこれまで試したものです、と私はちょうど一枚離れて最終的に私は後だ何を達成することから午前:私はので、私は動作しませんもちろんのが、InverseSchedule::newを試してみました

Map<Event, InverseSchedule> inverseSchedules = schedules.get() 
     .keySet() 
     .stream() 
     .collect(Collectors.toMap(Function.identity(), ???)); 

引数を渡さず、ラムダを使ってもできませんでした。

私はこれらの新しいJava 8機能を理解するのに苦労しています。私は本当に答えがの理由が含まれている場合は、それがちょうど欠けている部分を提供するよりもを含む場合は感謝します。

+4

'InverseSchedule :: new'、' InverseSchedule'のコンストラクタが 'Event'を取っているとしますか? – Tunaki

+2

'InverseSchedule :: new'がなぜ機能しないのですか?ストリームはそれに引数を渡します、それはイベントになります。上記のコンストラクタを表示することができれば最適です。 –

+2

答えが必要な場合は、標準Javaライブラリのクラスではないので、クラスに関する情報を追加する必要があります。そのため、提供するコンストラクタやメソッドがわかりません。 'Event'から' InverseSchedule'をどうやって作るのですか?値( 'EventSchedule')からの情報は必要ありませんか?あなたの質問を編集して展開してください。 – RealSkeptic

答えて

0

ラムダ式に正しいコンストラクタを使用することができます。また、schedules.get()は必須ではありません。

Map<Event, InverseSchedule> inverseSchedules = schedules 
    .keySet() 
    .stream() 
    .collect(Collectors.toMap(Function.identity(), event -> new InverseSchedule(event)); 
0

次はうまくいく

Map<Event, InverseSchedule> inverseSchedules = schedules.keySet() 
    .stream() 
    .collect(Collectors.toMap(Function.identity(), event -> new InverseSchedule(event)); 
+2

'イベント - >新しいInverseSchedule(イベント)'が動作する場合、 'InverseSchedule :: new'も同様に動作するはずです。 – Holger

0

構築複合体は私が悩みを抱えているならば、すべての暗黙の汎用パラメータを追跡することは困難ですので、私のいつものアプローチストリームすると、一時的に流れはこのように、個々のステートメントに組み込む分割することです:

Map<Event,EventSchedule> map1 = new HashMap<>(); 
    Set<Event> ks = map1.keySet(); 
    Stream<Event> st = ks.stream(); 
    Collector<Event,?,Map<Event,InverseSchedule>> coll = Collectors.toMap(Function.identity(), e -> new InverseSchedule(e)); 
    Map<Event,InverseSchedule> map2 = st.collect(coll); 

これは、さまざまなステップがどのように構成されているかを明確にします。このように動作させると、それらを1つのステートメントにまとめることができます。

関連する問題