Хороший ВАЛЛИдатор и конкурсы интересные :(
Подсмотрел решение в пред вопросах, можно конечно copy past, так и сделаю, но чем мой вариант не вариант :)
package com.javarush.task.task22.task2208;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/*
Формируем WHERE
*/
public class Solution {
public static void main(String[] args) {
String line = "name=Ivanov, country=Ukraine, city=Kiev, age=null";
Map<String, String> reconstructed = Arrays.stream(line.split(", "))
//Map<String, String> reconstructed = Arrays.stream(args)
.map(s -> s.split("="))
.collect(Collectors.toMap(s -> s[0], s -> s[1]));
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(reconstructed);
System.out.println(getQuery(reconstructed));
}
public static String getQuery(Map<String, String> params) {
params.values().removeIf(Objects::isNull);
params.values().removeIf("null"::equals);
StringBuilder result = new StringBuilder();
AtomicInteger count = new AtomicInteger(params.size());
params.forEach((string, string2) -> {
result.append(String.format("%s = '%s'", string, string2));
if (count.getAndDecrement() > 1) result.append(" end ");
});
// for testing..
/*for (Map.Entry<String, String> map: params.entrySet()
) {
result.append(String.format("%s = '%s'", map.getKey(), map.getValue()));
if (count.getAndDecrement() > 1) result.append(" end ");
}*/
return result.toString();
}
}