可选<CustomizedObject> 获取CustomizedObject 中列表的第一个元素

我不知道该怎么做


class Department {

    String deptName;

    List<Person> employees;

}


class Person {

    String personName;

}

问题陈述是获取在特定部门工作的人员的名字。该部门可以是可选的。这就是我的方法的样子 -


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

// TODO: 

}

我知道执行此操作的传统方法,但希望看到一些 Java 8 + lambda 方法来简化此操作。这里仍然是新手 - 所以如果我没有使用正确的格式,请原谅。


我还有一个默认名称可以使用,以防我们找不到该值。


PS 我知道将Optional 作为方法参数发送不是最佳实践。这不是实际的代码。我只是想简化它。


一只名叫tom的猫
浏览 118回答 3
3回答

侃侃无极

您可以使用mapon 函数Optional获取员工列表,然后使用streamget the name 或 return&nbsp;defaultName。即使 ifOptional为空,您也会得到&nbsp;defaultNameString&nbsp;getFirstPerson(Optional<Department>&nbsp;department,&nbsp;String&nbsp;defaultName)&nbsp;{&nbsp; &nbsp;&nbsp;return&nbsp;department.map(d->d.getEmployees().stream().map(Person::getPersonName).findFirst().orElse(defaultName)).orElse(defaultName)); }如果您有机会上null车getEmployees,可以使用以下方法department.map(Department::getEmployees) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter(Objects::nonNull) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(emp->emp.stream().map(Person::getPersonName).findFirst().orElse(defaultName)).orElse(defaultName)

湖上湖

一种简化的方法可以用于emptyList缺勤部门或 nullable&nbsp;employees:String&nbsp;getFirstPerson(Optional<Department>&nbsp;department,&nbsp;String&nbsp;defaultName)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;department.map(Department::getEmployees) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.orElse(Collections.emptyList())&nbsp;//&nbsp;get&nbsp;rid&nbsp;of&nbsp;this&nbsp;ensuring&nbsp;non&nbsp;null&nbsp;List &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(Person::getPersonName) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.findFirst() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.orElse(defaultName); }

慕哥9229398

实际上在:department.map(Department::getEmployees)           .filter(Objects::nonNull)           .map(emp->emp.stream().map(Person::getPersonName).findFirst().orElse(defaultName)).orElse(defaultName)我们不必检查非空,因为如果员工为空则.map(Department::getEmployees)返回。正确的答案是没有冗余过滤器:department.map(Department::getEmployees)           .map(emp->emp.stream().map(Person::getPersonName).findFirst().orElse(defaultName)).orElse(defaultName)或者:department.map(Department::getEmployees)           .map(List::stream)           .map(Stream::findFirst)           .flatMap(Functions.identity())           .map(Person::getPersonName)           .orElse(defaultName);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java