Для тестирования применяю след. код:
Map<String, String> map = new HashMap<>();
map.put("name", "Ivanov");
map.put("country", "Ukraine");
map.put("city", "Kiev");
map.put("age", null);
System.out.println(getQuery(map));
System.out.println(getQuery(map).equals("name = 'Ivanov' and country = 'Ukraine' and city = 'Kiev'"));
Последняя строка скопирована из примера и выдает truepackage com.javarush.task.task22.task2208;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/*
Формируем WHERE
Сформируй часть запроса WHERE используя StringBuilder.
Если значение null, то параметр не должен попадать в запрос.
Пример:
{name=Ivanov, country=Ukraine, city=Kiev, age=null}
Результат:
name = 'Ivanov' and country = 'Ukraine' and city = 'Kiev'
*/
public class Solution {
public static void main(String[] args) {
}
public static String getQuery(Map<String, String> params) {
StringBuilder outText = new StringBuilder();
//search name
for (Map.Entry<String, String> pair : params.entrySet()) {
if (pair.getKey().equals("name") && pair.getValue() != null)
outText.append("name = '").append(pair.getValue()).append("'");
}
//search country
for (Map.Entry<String, String> pair : params.entrySet()) {
if (pair.getKey().equals("country") && pair.getValue() != null)
if(outText.toString().isEmpty())
outText.append("country = '").append(pair.getValue()).append("'");
else
outText.append(" and ").append("country = '").append(pair.getValue()).append("'");
}
//search city
for (Map.Entry<String, String> pair : params.entrySet()) {
if (pair.getKey().equals("city") && pair.getValue() != null)
if(outText.toString().isEmpty())
outText.append("city = '").append(pair.getValue()).append("'");
else
outText.append(" and ").append("city = '").append(pair.getValue()).append("'");
}
//search age
for (Map.Entry<String, String> pair : params.entrySet()) {
if (pair.getKey().equals("age") && pair.getValue() != null)
if(outText.toString().isEmpty())
outText.append("age = '").append(pair.getValue()).append("'");
else
outText.append(" and ").append("age = '").append(pair.getValue()).append("'");
}
return outText.toString();
}
}