Java параметр потока foreach запрашивать у пользователя значение - PullRequest
0 голосов
/ 28 февраля 2020

Я строю утилиту cli, в которой я должен запрашивать ввод у пользователя из динамически сгенерированного набора параметров. Для этого sh у нас есть список строк, и мы создаем HashMap из (пары значений ключа имени параметра и значения, предоставленного из ввода cli).

Вот рабочий пример:

public class ConfigBuilderApplication {

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("parameterOne");
        list.add("parameterTwo");
        list.add("parameterThree");
        promptForParameterInput(list);
    }


    public static HashMap<String, String> promptForParameterInput(List<String> parameters) {
        System.out.println("There are " + parameters.size() + " parameters to designate.");
        HashMap<String, String> map = new HashMap<>();
        parameters.forEach(parameter -> {
            System.out.println("provide a value for " + parameter + ": ");
            InputStreamReader reader = new InputStreamReader(System.in);
            BufferedReader bufferedReader = new BufferedReader(reader);
            String input = null;
            try {
                input = bufferedReader.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            map.put(parameter, input);
        });
        System.out.println(map);
        return map;
    }


}

сейчас - когда я запускаю приложение, оно запрашивает у меня параметрOne, и я ввожу значение, но когда я нажимаю return, это не заставляет приложение двигаться вперед - я должен нажать return во второй раз. Тогда все остальные параметры, кажется, работают правильно: меня спрашивают в cli значение параметра, я предоставляю значение, и оно переходит к следующему параметру.

Вот пример вывода cli:

There are 3 parameters to designate.
provide a value for parameterOne: 
test

provide a value for parameterTwo: 
value
provide a value for parameterThree: 
provided
{parameterOne=, parameterThree=provided, parameterTwo=value}

Я уже потратил слишком много времени на эту простую проблему - надеясь, что кто-то уже сталкивался с этим и знает ответ:)

Спасибо, Джефф

...