我不知道該怎么做class Department { String deptName; List<Person> employees;}class Person { String personName;}問題陳述是獲取在特定部門工作的人員的名字。該部門可以是可選的。這就是我的方法的樣子 -String getFirstPerson(Optional<Department> department, String defaultName) {// TODO: }我知道執(zhí)行此操作的傳統(tǒng)方法,但希望看到一些 Java 8 + lambda 方法來簡化此操作。這里仍然是新手 - 所以如果我沒有使用正確的格式,請(qǐng)?jiān)彙N疫€有一個(gè)默認(rèn)名稱可以使用,以防我們找不到該值。PS 我知道將Optional 作為方法參數(shù)發(fā)送不是最佳實(shí)踐。這不是實(shí)際的代碼。我只是想簡化它。
3 回答

侃侃無極
TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
您可以使用map
on 函數(shù)Optional
獲取員工列表,然后使用stream
get the name 或 return defaultName
。即使 ifOptional
為空,您也會(huì)得到 defaultName
String getFirstPerson(Optional<Department> department, String defaultName) { return department.map(d->d.getEmployees().stream().map(Person::getPersonName).findFirst().orElse(defaultName)).orElse(defaultName)); }
如果您有機(jī)會(huì)上null
車getEmployees
,可以使用以下方法
department.map(Department::getEmployees) .filter(Objects::nonNull) .map(emp->emp.stream().map(Person::getPersonName).findFirst().orElse(defaultName)).orElse(defaultName)

湖上湖
TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊
一種簡化的方法可以用于emptyList
缺勤部門或 nullable employees
:
String getFirstPerson(Optional<Department> department, String defaultName) { return department.map(Department::getEmployees) .orElse(Collections.emptyList()) // get rid of this ensuring non null List .stream() .map(Person::getPersonName) .findFirst() .orElse(defaultName); }

慕哥9229398
TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊
實(shí)際上在:
department.map(Department::getEmployees) ??????????.filter(Objects::nonNull) ??????????.map(emp->emp.stream().map(Person::getPersonName).findFirst().orElse(defaultName)).orElse(defaultName)
我們不必檢查非空,因?yàn)槿绻麊T工為空則.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);
添加回答
舉報(bào)
0/150
提交
取消