2017-05-14 5 views
0

Wie kann ich einen bifunktionellen mit einer Funktion im Folowing Beispiel komponieren:Composing Java bifunktionellen und Funktion

public static void main(String[] args) { 
    BiFunction<String, Integer, String> zeroPadding = (string, zeros) -> String.format("%0" +zeros+ "d", Integer.valueOf(string)); 

    Function<String, String> removeNonDigitChars = (string) -> string.replaceAll("\\D", ""); 
} 

Zuerst habe ich nicht Ziffern Zeichen entfernen möchten, und die removeNonDigitChars zu zeroPadding bifunktionellen mit Parametern positives Ergebnis.

Ich habe versucht:

zeroPadding.andThen(removeNonDigitChars).apply("789.65", 8); 

und

removeNonDigitChars.compose(zeroPadding).apply("789.65", 8); 

Aber keiner von beiden Werke.

+2

'zeroPadding.apply (removeNonDigitChars.apply ("789,65"), 8) ; ' – 4castle

Antwort

0

Ihre zwei Versuche wenden die Funktionen in der falschen Reihenfolge an. Sie möchten removeNonDigitChars angewendet auf die Zeichenfolge vor geben die Zeichenfolge zeroPadding.

Leider können Sie andThen() oder compose() nicht verwenden, um die zwei Funktionen zu kombinieren.

Wenn Sie eine kombinierte Funktion wollen, einfach kombinieren sie selbst:

BiFunction<String, Integer, String> combined = (string, zeros) -> 
     zeroPadding.apply(removeNonDigitChars.apply(string), zeros); 

Dann wie folgt verwenden:

combined.apply("789.65", 8) // returns "00078965" 
+0

Ich habe verstanden. Vielen Dank. –

Verwandte Themen