2016-03-30 9 views
7

Sto provando a convertire un elenco in una mappa utilizzando la chiamata Collectors.toMap. L'elenco è costituito da oggetti ActivityReconcile. Voglio passare un'istanza per ogni voce nell'elenco nella chiamata toMap.java 8 cambia elenco per mappare utilizzando l'istanza dell'elenco

Il codice è di seguito e dove ho bisogno delle istanze è denotato da ??.

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

La domanda non è chiara su * me *. Ti dispiacerebbe specificare per favore? –

+1

La mappa accetta due argomenti: chiave e valore. Quindi, qual è la chiave e il valore della mappa di output prevista? –

+1

'toMap (Funzione keyMapper, Funzione valueMapper)' Questo metodo richiede due argomenti. Come proponi la chiave e/oi valori da determinare? Uomo, guarda il nome del metodo! 'createNewAccountTransactionKeyFromActivityReconcileRecord' –

risposta

4

Se ho capito bene, avrete bisogno di qualcosa di simile a

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

E il metodo (in AccountTransactionKey classe) sarà simile

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

Ho sostituito createNewAccountTransactionKeyFromActivityReconcileRec di generate per rendere la risposta più leggibile e comprensibile.

3

di "sistemare" il codice con le minime modifiche, aggiungere un parametro lambda:

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

o utilizzare un riferimento metodo:

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

btw, non ricordo di aver mai visto un nome del metodo fino a createNewAccountTransactionKeyFromActivityReconcileRecord - per la leggibilità, si consiglia di ridurlo a solo create(), poiché il tipo di ritorno e il tipo di parametro sono sufficienti per distinguerlo dagli altri metodi di fabbrica che si possono avere.