public class Swimmers extends SwimmersPrototype{
List<Swimmer> swimmers;
SortStrategy sortStrategy;
public Swimmers() {
swimmers = new ArrayList();
}
@Override
public SwimmersPrototype clone() throws CloneNotSupportedException{
Swimmers swp = (Swimmers)super.clone();
return swp;
}
public void setSortStrategyAndSort(SortStrategy s) {
setSortStrategy(s);
sort();
}
public void setSortStrategy(SortStrategy s){
sortStrategy = s;
}
public void addSwimmer(Swimmer s){
swimmers.add(s);
}
public List<Swimmer> sort() {
return (swimmers = sortStrategy.sort(new ArrayList<>(swimmers)));
}
public List<Swimmer> getSwimmers() {
return swimmers;
}
}
我已经将Swimmers类用作Swimmer记录的内存数据库。我有三张桌子,一张显示游泳者的清单,第二张显示只有18-25岁的游泳者,最后一张列出只有26-35岁的游泳者。
游泳运动员班级具有年龄属性,但是游泳运动员的年龄可能会发生变化,并可能导致另一个年龄组,例如,如果John 25岁并在比赛中庆祝生日,则他必须属于第二组。
那么在这里,哪种设计模式最好根据列表中的某个条件来选择一个组,条件的值也可能会有所不同,从而导致组中的变化?
答案 0 :(得分:3)
为每种情况创建一个Predicate
:
Predicate<Integer> youngSwimmer = integer -> integer > 18 && integer < 25;
Predicate<Integer> oldSwimmer = integer -> integer > 26 && integer < 35;
然后像这样测试它:
List<Swimmer> = getSwimmers().stream()
.filter(swimmer -> youngSwimmer.test(swimmer.getAge()))
.collect(Collectors.toList())
您可以为此定义一个单独的方法,并传递需要获取特定年龄游泳者列表的任何谓词