Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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 在条件值可能不同的列表中选择组的最佳设计模式? 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

我有一个游泳运动员课程,作为游泳运动员记录的内存数据库。我有三张表,一张是游泳运动员名单,第二张是18-25岁的游泳运动员名单,最后一张是26-35岁的游泳运动员名单

游泳运动员类有年龄属性,但游泳运动员的年龄可能会改变,并可能导致另一个年龄组,例如,如果约翰25岁,在比赛中庆祝他的生日,他必须在第二组


因此,在这里,哪种设计模式最适合根据列表中的某个条件选择一个组,并且条件的值可能会发生变化,从而导致组中的变化?

为您需要的每种情况创建一个
谓词

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())