Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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 实现一般情况下的过滤器设计模式(即过滤器特定的字符串属性)_Java_Oop_Design Patterns_Refactoring - Fatal编程技术网

Java 实现一般情况下的过滤器设计模式(即过滤器特定的字符串属性)

Java 实现一般情况下的过滤器设计模式(即过滤器特定的字符串属性),java,oop,design-patterns,refactoring,Java,Oop,Design Patterns,Refactoring,我正在实现这个设计模式的一个微小变化(过滤器) 我遇到的是,我需要过滤对象列表的字符串属性(比如“name”) 这里的问题是,我应该为存在的每个名称实现一个过滤器/标准类吗?我真的不这么认为。应该有更好、更模块化的方式来适应这一点: 请参阅,java中的接口要求其中的每个方法都由类实现。这意味着,如果我想创建一个NameCriteria类,我不能给它的方法meetCriteria(列出人员)两个参数(比如要过滤的字符串) 是否有一种实用且较少硬编码的方法来实现此模式,因此我可以创建一个meetC

我正在实现这个设计模式的一个微小变化(过滤器)

我遇到的是,我需要过滤对象列表的字符串属性(比如“name”)

这里的问题是,我应该为存在的每个名称实现一个过滤器/标准类吗?我真的不这么认为。应该有更好、更模块化的方式来适应这一点:

请参阅,java中的接口要求其中的每个方法都由类实现。这意味着,如果我想创建一个NameCriteria类,我不能给它的方法
meetCriteria(列出人员)
两个参数(比如要过滤的字符串)


是否有一种实用且较少硬编码的方法来实现此模式,因此我可以创建一个
meetCriteria(列出人员、字符串名称)
方法,或者对此的任何解决方法?

由于在Java 8中添加了
API,因此设计模式已经过时。标准现在由
谓词
接口定义,并由
过滤器
方法执行

public static void main(String... args) {
    Person john = new Person("John Doe", Gender.MALE, MaritalStatus.MARRIED);
    Person jane = new Person("Jane Doe", Gender.FEMALE, MaritalStatus.MARRIED);
    Person joe  = new Person("Joe Bloe", Gender.MALE, MaritalStatus.SINGLE);

    Set<Person> husbands = Stream.of(john, jane, joe)
            .filter(person -> person.gender == Gender.MALE)
            .filter(person -> person.maritalStatus == MaritalStatus.MARRIED)
            .collect(Collectors.toSet());
}

enum Gender {  MALE, FEMALE  }
enum MaritalStatus { MARRIED, SINGLE }
static class Person {
    final String name;
    final Gender gender;
    final MaritalStatus maritalStatus;

    Person(String name, Gender gender, MaritalStatus maritalStatus){
        this.name = name;
        this.gender = gender;
        this.maritalStatus = maritalStatus;
    }
}
publicstaticvoidmain(字符串…参数){
Person john=新人(“john Doe”,性别,男性,已婚);
Person jane=新人(“jane Doe”,性别,女性,婚姻状况,已婚);
Person joe=新人(“joe Bloe”,性别。男性,婚姻状况。单身);
(约翰、简、乔)
.filter(person->person.gender==gender.MALE)
.filter(person->person.maritalStatus==maritalStatus.marred)
.collect(收集器.toSet());
}
枚举性别{男性,女性}
enum MaritalStatus{已婚,单身}
静态类人{
最后的字符串名;
最终性别;
最终海洋状态海洋状态;
Person(字符串名称、性别、MaritalStatus MaritalStatus){
this.name=名称;
这个。性别=性别;
this.maritalStatus=maritalStatus;
}
}

由于在Java8中添加了
API,该设计模式已经过时。标准现在由
谓词
接口定义,并由
过滤器
方法执行

public static void main(String... args) {
    Person john = new Person("John Doe", Gender.MALE, MaritalStatus.MARRIED);
    Person jane = new Person("Jane Doe", Gender.FEMALE, MaritalStatus.MARRIED);
    Person joe  = new Person("Joe Bloe", Gender.MALE, MaritalStatus.SINGLE);

    Set<Person> husbands = Stream.of(john, jane, joe)
            .filter(person -> person.gender == Gender.MALE)
            .filter(person -> person.maritalStatus == MaritalStatus.MARRIED)
            .collect(Collectors.toSet());
}

enum Gender {  MALE, FEMALE  }
enum MaritalStatus { MARRIED, SINGLE }
static class Person {
    final String name;
    final Gender gender;
    final MaritalStatus maritalStatus;

    Person(String name, Gender gender, MaritalStatus maritalStatus){
        this.name = name;
        this.gender = gender;
        this.maritalStatus = maritalStatus;
    }
}
publicstaticvoidmain(字符串…参数){
Person john=新人(“john Doe”,性别,男性,已婚);
Person jane=新人(“jane Doe”,性别,女性,婚姻状况,已婚);
Person joe=新人(“joe Bloe”,性别。男性,婚姻状况。单身);
(约翰、简、乔)
.filter(person->person.gender==gender.MALE)
.filter(person->person.maritalStatus==maritalStatus.marred)
.collect(收集器.toSet());
}
枚举性别{男性,女性}
enum MaritalStatus{已婚,单身}
静态类人{
最后的字符串名;
最终性别;
最终海洋状态海洋状态;
Person(字符串名称、性别、MaritalStatus MaritalStatus){
this.name=名称;
这个。性别=性别;
this.maritalStatus=maritalStatus;
}
}

我目前正在为设计模式提供外部过滤功能,但感觉不自然。如果我没有更好的解决方案,我会在几天后在这里发布我的解决方案。我目前正在为设计模式制作一个外部过滤功能,但感觉很不自然。如果我没有更好的解决方案,我会在几天后在这里发布我的解决方案。