Komplexes Beispiel von funktionale Interfaces in Java
Abschließend zum Thema funktionale Interfaces in Java, soll dieses Beispiel ein etwas komplexeren Zusammenhang demonstrieren wie man funktionale Interfaces verwenden kann.
Dafür wird für eine Person eine email und Telefonnummer überprüft. Die email muss ein @ enthalten und die Telefonnummer mit 0 beginnen.
Dann werden mithilfe des RegistrationValidator eine Reihe von Lambda Expressions in Validator ausgeführt, um so zu sehen ob eine email und Telefonnummer das vorgegebene Muster erfüllen.
Person
package functional;
/** Simple Person */
public class Person {
public String email;
public String phonenumber;
public Person(String email, String phonenumber){
this.email = email;
this.phonenumber = phonenumber;
}
}
Validator
package functional;
import static functional.RegistrationValidator.*;
public class Validator {
public static void main(String[] args){
Person person = new Person("[email protected]","+01465518893");
/* complex example how functional programming works in java */
/* examine if email and phonenumber from the created person have the right pattern */
ValidationResult result = isEmailValid()
.and(isPhoneNumberValid())
.apply(person);
if (result != ValidationResult.SUCCESS){
throw new IllegalStateException(result.name());
} else {
System.out.println(result);
}
}
}
RegistrationValidator
package functional;
import java.util.function.Function;
import static functional.RegistrationValidator.*;
import static functional.RegistrationValidator.ValidationResult.*;
@FunctionalInterface
public interface RegistrationValidator extends Function<Person, ValidationResult> {
static RegistrationValidator isEmailValid() {
return person -> person.email.contains("@") ? SUCCESS : EMAIL_INVALID;
}
static RegistrationValidator isPhoneNumberValid() {
return person -> person.phonenumber.startsWith("+0") ? SUCCESS : PHONENUMBER_INVALID;
}
default RegistrationValidator and (RegistrationValidator other) {
return person -> {
ValidationResult result = this.apply(person);
return result.equals(SUCCESS) ? other.apply(person) : result;
};
}
enum ValidationResult {
SUCCESS, EMAIL_INVALID, PHONENUMBER_INVALID;
}
}
0
0
0.000
Wunderbar! Ich habe vor 30 Jahren in FORTRAN programmiert. Das war lange Zeit die meist verwendete Programmiersprache. Dann bin ich in UNIX eingestiegen, Shellscript und perl.
Nun bin ich froh, dass es genügend schlaue und fleißige Leute wie dich gibt, die professionell programmieren können.
Wenn du es schaffst, dein Programm in FORTRAN zu schreiben, bekommst du von mir 5 HIVE, lol.
FORTRAN sagt mir was, habe ich aber glaube ich noch nie verwendet.
Heutzutage gibt es viele von diesen höhere Programmiersprachen wie Java, Kotlin, c#, ... was einem die Arbeit auch etwas vereinfacht. Ich kann mir gut vorstellen, dass es zu damaligen Zeiten schwieriger bzw. zeitaufwändiger war größeren Code zu schreiben.
!BBH
@herz-ass! Your Content Is Awesome so I just sent 1 $BBH (Bitcoin Backed Hive) to your account on behalf of @ozelot47. (2/5)
Für dich auch paar Tokens für die Sammlung.
!BBH !WITZ !SLOTH
Learn more about the SLOTHBUZZ Token at Sloth.Buzz and consider sharing your post there or using the #slothbuzz next time
(2/3)
lolztoken.com
Nein, bitte in der Umkleidekabine.
Credit: burn950
@ozelot47, ich habe dir im Namen von @dotwin1981 einen $LOLZ Token gesendet
Verwende den Befehl !WITZ oder !LOOL, um einen Witz und ein $LOLZ zu teilen.
Farm LOLZ tokens when you Delegate Hive or Hive Tokens.
Click to delegate: 10 - 20 - 50 - 100 HP
.(4/10)
@ozelot47! Your Content Is Awesome so I just sent 1 $BBH (Bitcoin Backed Hive) to your account on behalf of @dotwin1981. (18/50)
Ich gebe was zurück. !BBH !BEER
@dotwin1981! Your Content Is Awesome so I just sent 1 $BBH (Bitcoin Backed Hive) to your account on behalf of @ozelot47. (3/5)
View or trade
BEER
.Hey @dotwin1981, here is a little bit of
BEER
from @ozelot47 for you. Enjoy it!Did you know that <a href='https://dcity.io/cityyou can use BEER at dCity game to buy cards to rule the world.