亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

可選<CustomizedObject> 獲取CustomizedObject 中列表的第一個元素

可選<CustomizedObject> 獲取CustomizedObject 中列表的第一個元素

一只名叫tom的貓 2023-09-13 17:16:53
我不知道該怎么做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個贊

您可以使用mapon 函數Optional獲取員工列表,然后使用streamget 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));
}

如果您有機會上nullgetEmployees,可以使用以下方法

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


查看完整回答
反對 回復 2023-09-13
?
湖上湖

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);
}


查看完整回答
反對 回復 2023-09-13
?
慕哥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);


查看完整回答
反對 回復 2023-09-13
  • 3 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號