Interfaz funcional Java8

ArunM:
public static <E extends Enum<E>> boolean validateEnum(Class<E> clazz, String s) {
    return EnumSet.allOf(clazz).stream().anyMatch(e -> e.name().equals(s));
}

Lo que sigue es un ejemplo de invocación del método anterior

boolean isValid = validateEnum(Animal.class, "DOG");
boolean isValid = validateEnum(Color.class, "Red");

Puede esta misma funcionalidad puede implementar utilizando un 8 de Java FunctionalInterface. He intentado crear una BiPredicate, pero estoy recibiendo errores de compilación cuando intento esto.

final BiPredicate<String,Class> biPre = (string1, clazz) -> EnumSet.allOf(clazz).stream().anyMatch(e -> e.name().equals(s));
Ravindra Ranwala:

Aquí está una manera de hacerlo uno,

final BiPredicate<String, ? super Enum<?>> biPre = (string1, enumType) -> EnumSet
        .allOf(enumType.getDeclaringClass()).stream().anyMatch(e -> e.name().equals(string1));

Y aquí está el código de cliente,

boolean test = biPre.test("DOG", Animal.CAT);

Sin embargo el paso de una constante de enumeración en lugar de un literal de clase parece un poco incómodo aquí.

Si realmente necesita usar el tipo de token Esto es lo que debe hacer,

final BiPredicate<String, Class<? extends Enum<?>>> biPre = (string1, clazz) -> Arrays
    .stream(clazz.getEnumConstants()).anyMatch(e -> e.name().equals(string1));

El cliente ahora se ve así,

boolean test = biPre.test("DOG", Animal.class);

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=173543&siteId=1
Recomendado
Clasificación