2015-04-16 5 views
15

Ho un Consumer<T> che mi piacerebbe per convertire in un Function<T, Void>.C'è un modo standard per convertire un java.util.function, Consumer <T> in un java.util.function.Function <T, Void>

potrei ottenere che utilizzando

public <T> Function<T, Void> consumerToFunction(Consumer<T> consumer) 
{ 
    return x -> { 
     consumer.accept(x); 
     return null; 
    }; 
} 

Ma ho il sospetto che qualcosa di simile che esistono potrebbe già nel JDK o forse in una libreria comune.

+0

No, non credo, mi sembra giusto. Detto questo, perché lo vuoi? 'Funzione' s dovrebbe generalmente essere privo di effetti collaterali. –

+1

'consumer :: accept'? EDIT: [nope] (http://ideone.com/NUGYOj), void non può essere convertito in Void. Inoltre, 'Void' e' T' sono nell'ordine sbagliato. – user2357112

+0

Ho un'istanza 'Consumer ' e l'API che sto usando richiede una 'Funzione '. La chiamata finisce per restituire il 'R' a me. Non ho bisogno di quel 'R' e posso tranquillamente ignorarlo. – GuiSim

risposta

7

Sembra che sia necessario adattare uno Consumer<T> a Function<T, R>. Hai creato un buon esempio di Adapter Pattern.

[T] il modello di adattatore è un modello di progettazione software che consente di utilizzare l'interfaccia di una classe esistente da un'altra interfaccia.

Si sta utilizzando uno Consumer da un Function.

Non conosco alcun convertitore JDK integrato tra le interfacce funzionali, ma questo sembra essere un buon modo per applicare un modello standard per risolvere il problema.

Problemi correlati