@EDIT: I want the function to be able to search without me saying what are the variables that it should be searching. For example, I want the same function to search for minimumClients + Location and give me all that contain those values, but if the user only chose pricePerNight + roomsQuantity then it should search on the same list for different variables without me telling it which variables to search.
I do not want to add inside the function ".getLocation().equals(location)", I want to make it so it compares the values passed as an argument that are != from NULL to the objects inside the list.
List<Property> properties = new ArrayList<>();
// Let's say I want to look for properties with the minimumClients = 4;
// I would do Property p = new Property();
p.setMinimumClients(4);
properties = getPropertyList(p);
// That would give me the Property 3
// But if I want to look for properties with pricePerNight = 30 and location = "Portugal" I would:
Property p = new Property();
p.setPricePerNight(20);
p.setLocation("Portugal);
properties = getPropertyList(p);
// This would give me the Property 1 using the same function above. I do not want to specify what I am looking for, I want to make it so it knows what I am looking for.
This is what I mean:
I have the following class
public class Property() {
    private int minimumClients;
    private int maximumClients;
    private float pricePerNight;
    private String location;
    private int roomsQuantity;
}
I'll be needing to search for properties, meaning I can either search:
- For a location
- For a price per night
- For a location and number of rooms
- For a location, with given number of rooms and a given price
- For a location and a minimum number of clients
etc.
I'll be having a list of properties in another class called Repository
public class Repository() {
    private List<Property> properties;
}
What I want to know is: Due to the huge amount of searching possibilities on a property, is there any way I can send an object containing only the information I want to search for, and while iterating through the properties list only return the properties that contain all the object information?
Example:
public class Repository() {
    private List<Property> properties; // Assume a constructor exists
    // I'll be using a foreach here
    // property contains location = "Spain" and roomQuantity = 2
    // The rest is null, I want to add to the list properties that are located in spain and contain 2 rooms
    public List getPropertiesList(Property property) {
        List<Property> newList = new ArrayList<>();
        for(Property p : this.properties)
        {
            // Is there any function I can use here to check if it contains the info I'm searching for, not caring if others are different?
            if(p.containsEqualInfo(property))
            {
                newList.add(p);
            }
        }
        return newList;
    }
}
Basically:
I want to search (for example) and return a list of all the properties that are located in Spain and have a number of rooms equal to 2, not caring about the other variables values.
Property1
0
3
30
Portugal
2
Property2
0
3
30
Spain
2
Property3
4
7
120
Spain
2
Property4
0
10
300
Spain
3
If I had the above list inside the repository, once I called the function (getPropertiesList(p), p = the object that only contains spain and 2) the returned list would contain:
Property2 + Property3
