Java 从具有多个条件的列表中搜索子列表

标签 java list search

我想从餐厅列表中创建一个搜索方法。用户有一个 GUI 表单,并且只填写他想要的字段。 我做了一个方法 meetCriteria 来检查这家餐厅是否存在。它有效,但并非在所有情况下都有效。

public class RestaurantList {
    private ArrayList<Restaurant> _restaurants = new ArrayList<Restaurant>();
        RestaurantList selRest;

        RestaurantList searchRestaurant(String name, String area, String phone, String category)
                {
                    selRest = new RestaurantList();
                    for (int i=0; i< _restaurants.size(); i++)
                    {
                        if(_restaurants.get(i).meetsCriteria(name, area, phone, category))
                        {
                            selRest.addRestaurant(_restaurants.get(i));
                        }

                    }
                    return this.selRest;
                }

public class Controller {


    //this is list with all Restaurants
    static RestaurantList restList = new RestaurantList();
    //this is list with the result of the search.

    public static RestaurantList selList; // selectedList


    public void addRestaurant (Restaurant rest)
    {
        restList.addRestaurant(rest);
    }

    public  void searchCriteria(String name, String area, String phone, String category)
    {

        int size = restList.getRestaurants().size();
        for(int i =0; i<size; i++)
            selList = restList.searchRestaurant(name, area, phone, category);

    }  
}

public class Restaurant {
        private String _name;
    private String _address;
    private String _phoneNum;
        private Area _area;

        public boolean meetsCriteria(String name, String area, String phone, String category)
        {
            if( this._name.equals(name) && this._area.getArea().equals(area) && this._phoneNum.equals(phone) && this._category.equals(category) )
            {
                return true;


            }
            if ( name.equals("") && area.equals(this._area.getArea()) && phone.equals("") && category.equals("") )
            {
                return true;


            }
            if ( name.equals("") && area.equals(this._area.getArea()) && phone.equals(this._phoneNum) && category.equals("") )
            {
                return true;


            }
            if (name.equals("") && area.equals(this._area.getArea()) && phone.equals("") && category.equals(this._category) )
            {
               return true; 


            }
            if ( area.equals(this._area.getArea()) && phone.equals("") && category.equals("") )
            {
                int index = this._name.indexOf(name);
                if (index != -1)
                {
                    return true; 
                }else return false;


            }
            if (area.equals(this._area) && category.equals(this._category) )
            {
                return true;
            }
            else
            {
            return false;
            }
        }
}

最佳答案

首先为“meetsCriteria”方法编写一个单元测试,以便您可以轻松查看哪些条件通过,哪些条件失败。

例如:

assertTrue(myRestaurant.meetsCriteria("nandos", "new york", "0124536", "tasty"));

Ps.,我可能会将您的“searchRestaurant”更改为如下所示:

List<Restaurant> searchRestaurant(List<Restaurant> allRestaurants, String name, String area, String phone, String category) {
    List<Restaurant> matches = new ArrayList<Restaurant>();
    for (Restaurant restaurant : allRestaurants) {
        if (restaurant.meetsCriteria(name, area, phone, category)) {
            matches.addRestaurant(allRestaurants.get(i));
        }
    }
    return matches;
}

关于Java 从具有多个条件的列表中搜索子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11019095/

相关文章:

java - 如何使用 org.apache.commons.logging 记录到一个文件?

java - 设计模式来替换具有多个参数的方法

java - 如何创建一个 Applet 来创建从 Oracle 数据库中提取的下拉列表

python - 在函数中编辑列表是如何工作的

python - 在 DataFrame 中多次拆分字符串

c++ - 实现一个接收和处理客户端请求的服务器(cassandra 作为后端),Python 还是 C++?

javascript - 基于个人资料的用户兴趣搜索

java - 从 Java 中的方法返回类时的方法规范

python - 在 python 中使用 pid 列表杀死所有进程?

arrays - Laravel ajax 具有多个模型的实时搜索查询