【问题标题】:Searching an object stored in arraylist by multi word search key通过多词搜索键搜索存储在arraylist中的对象
【发布时间】:2017-07-17 14:12:29
【问题描述】:

我正在开发一种搜索算法。其中我们有一个学生对象的 ArrayList。我们必须从 ArrayList 中搜索学生。学生班级的属性是姓名、城市、国家和电话号码。搜索应该这样工作,如果我们输入姓名、城市、国家或号码,我们应该得到与搜索匹配的学生对象列表。所以,如果我们在搜索中输入“john”,那么我们应该得到一个名为 john 的学生对象的列表。如果搜索查询有多个单词(例如“john brazil”),那么我们应该得到名称为 john 且国家/地区为 brazil 的所有学生对象的列表。我没有得到正确的输出,在列表中,我得到了名称为 john 的所有对象以及国家为巴西的所有对象。获取 (name || country) 但我需要 (Name && country)。任何帮助将不胜感激。提前致谢。

代码如下:

public Class Student {
    private String first_name;
    private String last_name;
    private String city;
    private String country;
    private int phone_number; 
}

public ArrayList<Student> searchMethod() {

    ArrayList<Student> initial_result_list= new ArrayList<Student>;

    for (Student student : student_list) {
        for (String search : array_of_search_words) {
            if((null!=student.getName() && student.getName().contains(search))
            || (null!=student.getCity() && student.getCity().contains(search))
            || (null!=student.getCountry() && student.getCountry().contains(search))
            || (null!=student.getCity() && student.getCity().contains(search))
            || (null!=student.getPhone_number() && student.getPhone_number().contains(search))) {

                if(!initial_result_list.contains(student)) {
                    initial_result_list.add(student);
                }
            }
        }
    }
    return initial_result_list;
}

【问题讨论】:

    标签: java algorithm sorting search full-text-search


    【解决方案1】:

    您必须确保array_of_search_words 中的每个单词都与Class Student 的某些属性匹配。

    为此,将您的逻辑更改为:

    for (Student student : student_list) {
        bool matched = false;
        for (String search : array_of_search_words) {
            if((null!=student.getName() && student.getName().contains(search))
            || (null!=student.getCity() && student.getCity().contains(search))
            || (null!=student.getCountry() && student.getCountry().contains(search))
            || (null!=student.getCity() && student.getCity().contains(search))
            || (null!=student.getPhone_number() && student.getPhone_number().contains(search))) {    
            matched = true;           
            }
            else {matched = false;break;}
    
        }
        if(!initial_result_list.contains(student) && matched)
                    initial_result_list.add(student);
    }
    

    【讨论】:

      猜你喜欢
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      • 2017-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多