2017-02-03 50 views
8

我有一個const experience值,person對象,skill和方法列表(不能修改它)hasSkill(skill,person,experience)它返回布爾值。 我想檢查person是否擁有列表中的所有技能。檢查每個列表項的語句

我的代碼是:

int experience = 5; 

private hasAllSkills(person){ 
return skillList.stream().filter(s -> hasSingleSkill(s,person)).collect(Collectors.toList()).size() == skillList.size() ? true : false; 
} 

private boolean hasSingleSkill(Skill s, Person p){ 
return hasSkill(s,p,experience); 
} 

我敢肯定有更好的解決辦法,但無法找到它;我應該怎麼做才能修復我的代碼?

+2

那麼你可以刪除'?事實上:虛假的......有什麼你認爲有條件的運營商正在實現? –

回答

8

這聽起來像你想allMatch

return skillList.stream().allMatch(s -> hasSingleSkill(s, person)); 

作爲另一種更普遍的事情,任何時候你有

condition ? true : false 

只需更換與

condition 

所以你現有的代碼

(long-expression).size() == skillList.size() ? true : false 

可以簡化爲

(long-expression).size() == skillList.size() 
+4

你甚至可以進一步說*隨時*一個'boolean'文字('true'或'false')出現在一個複合表達式中,有一個沒有文字的選擇(除非結果總是'true'或'false'無論如何)。在大多數情況下,它會更簡單。 – Holger