2017-02-03 15 views
8

Mam stałą wartość experience, person obiekt, lista skill i metoda (nie można zmienić) hasSkill(skill,person,experience), która zwraca wartość logiczną. Chcę sprawdzić, czy person ma wszystkie umiejętności z listy.Sprawdź instrukcję dla każdej pozycji listy

Mój kod to:

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

Jestem pewien, że istnieje lepsze rozwiązanie, ale nie może go znaleźć; co powinienem zrobić, aby naprawić mój kod?

+2

Cóż można usunąć '? true: false' po pierwsze ... co według ciebie osiąga operator warunkowy? –

Odpowiedz

8

Brzmi jak chcesz allMatch:

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

W innym bardziej ogólnym zakresie, za każdym razem trzeba

condition ? true : false 

można po prostu zastąpić że z

condition 

więc istniejący kod:

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

można uprościć do

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

Możesz nawet pójść dalej i powiedzieć * w każdej chwili * W wyrażeniu złożonym pojawia się literał 'boolean' (' true' lub 'false'), istnieje alternatywa bez literałów (chyba że wynikiem jest zawsze" prawda "lub" fałsz " tak czy inaczej). W większości przypadków będzie to prostsze. – Holger

Powiązane problemy