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

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

湖上湖
TA貢獻2003條經驗 獲得超2個贊
一種簡化的方法可以用于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貢獻1877條經驗 獲得超6個贊
實際上在:
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);
添加回答
舉報
0/150
提交
取消