método Java genéricos para filtrar y encontrar primer elemento de la lista

Directora:
private Feature findFeature(String name, List<Feature> list) {
    for (Feature item : list) {
        if (item.getName().equals(name)) {
            return  item;
        }
    }
    return null;
}

Tengo otros 10 métodos como éste. Misma firma, misma lógica. Sólo diferente es que el parámetro de lista está utilizando diferentes objetos, por ejemplo List<Data> list, o List<Option> list, etc. Todos los objetos tiene un getName()método en ella. Quiero crear un método genérico y eliminar todos los demás.

Si uso algo como esto,

private <T> T findInList(String name, List<T> list) {

No tengo acceso al getName()método. ¿Cuál es la forma más fácil de crear este método? Es API de reflexión la única opción?

EDITAR:

He encontrado el error que yo. Está trabajando muy bien como esto:

for (FeatureEntity entity : data.getFeatures()) {
    Predicate<Feature> filter = f -> f.getName().equalsIgnoreCase(entity.getName());
    if (entity.getFeatureId() != null && findInList(featureList, filter) == null) {
        FeatureEntity n = new FeatureEntity();
        n.setId(entity.getId());
        // ...
    }
}
Consorcio inactivo :

Puede crear método genérico que se lleva a lista genérica con Predicateconseguir el primer elemento coincidente después de filtrar

private <T> T findFeature(List<T> list, Predicate<T> predicate) {
    return list.stream().filter(predicate).findFirst().orElse(null);
}

Y luego crear Predicatecon el tipo requerido y llamar a ese método

Predicate< Feature > filter = f->f.getName().equalsIgnoreCase(name);
findFeature(list,filter);

Por otro lado, también se puede devolver Optional<T>en lugar de nullcuando no se encuentra ningún elemento:

private <T> Optional<T> findFeature(List<T> list, Predicate<T> predicate) {
    return list.stream().filter(predicate).findFirst();
}

Supongo que te gusta

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