001package net.filebot.web; 002 003import static java.util.stream.Collectors.*; 004 005import java.util.List; 006import java.util.function.Predicate; 007 008public interface Crew { 009 010 List<Person> getCrew(); 011 012 default List<Person> getCast() { 013 return getCrew().stream().filter(Person::isActor).collect(toList()); 014 } 015 016 default List<String> getActors() { 017 return getCrewNames(Person::isActor); 018 } 019 020 default List<String> getDirectors() { 021 return getCrewNames(Person::isDirector); 022 } 023 024 default List<String> getWriters() { 025 return getCrewNames(Person::isWriter); 026 } 027 028 default String getDirector() { 029 return getCrewName(Person::isDirector); 030 } 031 032 default String getWriter() { 033 return getCrewName(Person::isWriter); 034 } 035 036 default String getCrewName(Predicate<Person> filter) { 037 return getCrew().stream().filter(filter).map(Person::getName).findFirst().orElse(null); 038 } 039 040 default List<String> getCrewNames(Predicate<Person> filter) { 041 return getCrew().stream().filter(filter).map(Person::getName).collect(toList()); 042 } 043 044}