Java 8 - En option <CustomizedObject> get premier élément de la liste dans CustomizedObject

méso:

Je ne sais pas comment faire

class Department {
    String deptName;
    List<Person> employees;
}

class Person {
    String personName;
}

L'énoncé du problème est d'aller chercher le premier nom de la personne qui travaille dans un service particulier. Ce service peut être facultative. Voilà donc comment mon apparence méthode -

String getFirstPerson(Optional<Department> department, String defaultName) {
// TODO: 
}

Je sais que la façon traditionnelle de faire cela, mais voudrais voir une certaine façon Java 8 + lambda pour simplifier. Encore un débutant ici - Veuillez donc remplir le pardon si je ne suis pas le format approprié.

J'ai aussi un nom par défaut à utiliser dans le cas où nous ne trouvons cette valeur.

PS Je sais que ce n'est pas la meilleure pratique d'envoyer en option en tant que paramètre de méthode. Ce n'est pas le code réel. Je suis juste en train de le simplifier.

Dead Pool :

Vous pouvez utiliser la mapfonction sur Optionalpour obtenir la liste des employés, puis utiliser streamobtenir le prénom ou le retour defaultName. Même si Incase Optionalest vide , vous obtiendrez ledefaultName

String getFirstPerson(Optional<Department> department, String defaultName) {

   return department.map(d->d.getEmployees().stream().map(Person::getPersonName).findFirst().orElse(defaultName)).orElse(defaultName));
}

Si vous avez une chance d'obtenir nullsur getEmployeesvous pouvez utiliser ci - dessous approche

department.map(Department::getEmployees)
          .filter(Objects::nonNull)
          .map(emp->emp.stream().map(Person::getPersonName).findFirst().orElse(defaultName)).orElse(defaultName)

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=312701&siteId=1
conseillé
Classement