2015-04-16 9 views
15

Mam Consumer<T>, które chciałbym skonwertować do Function<T, Void>.Czy istnieje standardowy sposób przekonwertować java.util.function, Konsument <T> w java.util.function.Function <T, Void>

mogę to osiągnąć za pomocą

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

Ale podejrzewam, że coś takiego może już istnieć w JDK lub być może we wspólnej bibliotece.

+0

Nie, nie sądzę, że wygląda mi dobrze. To powiedziawszy - dlaczego tego chcesz? "Funkcja" powinna być ogólnie wolna od skutków ubocznych. –

+1

'konsument :: zaakceptuj"? EDYCJA: [nope] (http://ideone.com/NUGYOj), void nie można przekształcić w Void. Również 'Void' i' T' są w niewłaściwej kolejności. – user2357112

+0

Mam instancję 'Consumer ' a interfejs API, którego używam, wymaga 'funkcji '. Połączenie w końcu zwraca mi "R". Nie potrzebuję tego "R" i mogę go bezpiecznie zignorować. – GuiSim

Odpowiedz

7

Wygląda na to, że musisz przystosować Consumer<T> do Function<T, R>. Stworzyłeś dobry przykład Adapter Pattern.

Wzorzec adaptera [T] jest wzorcem projektowym oprogramowania, który umożliwia użycie interfejsu istniejącej klasy z innego interfejsu.

Pozwoliłeś użyć Consumer z Function.

Nie znam żadnego wbudowanego konwertera JDK między interfejsami funkcjonalnymi, ale wydaje się, że jest to dobry sposób na zastosowanie standardowego wzorca do rozwiązania problemu.

Powiązane problemy