Java 在条件值可能不同的列表中选择组的最佳设计模式? public-class-Swimmers扩展了SwimmersPrototype{ 游泳运动员名单; SortStrategy SortStrategy; 公众游泳人士(){ 游泳者=新ArrayList(); } @凌驾 公共游泳者Prototype clone()引发CloneNotSupportedException{ 游泳运动员swp=(游泳运动员)super.clone(); 返回swp; } 公共无效设置排序策略和排序(排序策略s){ 制定战略; 排序(); } 公共战略(SortStrategy s){ sortStrategy=s; } 公众游泳者{ 游泳人士。加入(s); } 公共列表排序(){ return(swimmers=sortStrategy.sort(newarraylist(swimmers))); } 公众游泳运动员名单(){ 回港游泳人士;; } }
我有一个游泳运动员课程,作为游泳运动员记录的内存数据库。我有三张表,一张是游泳运动员名单,第二张是18-25岁的游泳运动员名单,最后一张是26-35岁的游泳运动员名单 游泳运动员类有年龄属性,但游泳运动员的年龄可能会改变,并可能导致另一个年龄组,例如,如果约翰25岁,在比赛中庆祝他的生日,他必须在第二组Java 在条件值可能不同的列表中选择组的最佳设计模式? public-class-Swimmers扩展了SwimmersPrototype{ 游泳运动员名单; SortStrategy SortStrategy; 公众游泳人士(){ 游泳者=新ArrayList(); } @凌驾 公共游泳者Prototype clone()引发CloneNotSupportedException{ 游泳运动员swp=(游泳运动员)super.clone(); 返回swp; } 公共无效设置排序策略和排序(排序策略s){ 制定战略; 排序(); } 公共战略(SortStrategy s){ sortStrategy=s; } 公众游泳者{ 游泳人士。加入(s); } 公共列表排序(){ return(swimmers=sortStrategy.sort(newarraylist(swimmers))); } 公众游泳运动员名单(){ 回港游泳人士;; } },java,design-patterns,Java,Design Patterns,我有一个游泳运动员课程,作为游泳运动员记录的内存数据库。我有三张表,一张是游泳运动员名单,第二张是18-25岁的游泳运动员名单,最后一张是26-35岁的游泳运动员名单 游泳运动员类有年龄属性,但游泳运动员的年龄可能会改变,并可能导致另一个年龄组,例如,如果约翰25岁,在比赛中庆祝他的生日,他必须在第二组 因此,在这里,哪种设计模式最适合根据列表中的某个条件选择一个组,并且条件的值可能会发生变化,从而导致组中的变化?为您需要的每种情况创建一个谓词: public class Swimmers ex
因此,在这里,哪种设计模式最适合根据列表中的某个条件选择一个组,并且条件的值可能会发生变化,从而导致组中的变化?为您需要的每种情况创建一个
谓词
:
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;
}
}
Predicate youngswiller=integer->integer>18&&integer<25;
谓词oldswiller=integer->integer>26&&integer<35;
然后像这样测试它:
Predicate<Integer> youngSwimmer = integer -> integer > 18 && integer < 25;
Predicate<Integer> oldSwimmer = integer -> integer > 26 && integer < 35;
List=getswimbers().stream()
.filter(游泳者->年轻游泳者.test(游泳者.getAge())
.collect(收集器.toList())
你可以为此定义一个单独的方法,并传递任何你需要的谓词,以获得特定年龄的游泳运动员列表对不起,我不知道你是否要求在列表中搜索算法或设计模式,以实现其他目标,如在运行时改变策略,我想要一种设计模式,它可以简单地选择列表中的一个组,并且在运行时策略可能会发生变化。您当前的实现有什么问题吗?据我所知,策略模式似乎适合您的需要。与其制作对象,例如
Swimers
和SortStrategy
,不如将所有Swimers放在一个列表中List swimers=…
当您想要检索一组特定的swimers时,只需使用stream().filter()
返回您想要的结果。示例:swimmer.stream().filter(swimmer->swimmer.getAge()>=18&&swimmer.getAge()
List<Swimmer> = getSwimmers().stream()
.filter(swimmer -> youngSwimmer.test(swimmer.getAge()))
.collect(Collectors.toList())