Как создать строку с помощью String.format, взяв параметры из списка - PullRequest
3 голосов
/ 16 октября 2019

Я хочу создать String с String.format, например, String.format ("Q1 = {}, Q2 = {}, Q3 = {}, Q4 = {}" list) из значений списка, который содержитЦелые числа.

private String createString(Player player){

List<Integer> answers= new ArrayList<>();
    answers.add(player.getQuestion1());
    answers.add(player.getQuestion2());
    answers.add(player.getQuestion3());
    answers.add(player.getQuestion4());
    answers.add(player.getQuestion5());
    answers.add(player.getQuestion6());
    answers.add(player.getQuestion7());
    answers.add(player.getQuestion8());
    answers.add(player.getQuestion9());
    answers.add(player.getQuestion10());
    return String.format("Q1={}, Q2={}, Q3={}, Q4={}, Q5={}, Q6={}, Q7={}, Q8={}, Q9={}, Q10={}", answers.stream().map(a -> a.toString());

}

Ответы [ 3 ]

3 голосов
/ 16 октября 2019

Примерно так: Collectors.joining с отображением, как требуется, с индексом и ответом:

return IntStream.range(0, answers.size())
            .mapToObj(idx -> String.format("Q%s = %s", idx + 1, answers.get(idx)))
            .collect(Collectors.joining(", "))
1 голос
/ 16 октября 2019

String.format не подходит для этого примера, потому что вам нужно точно количество заполнителей в вашем формате в качестве размера списка. Вам лучше построить свою собственную строку. Но в случае, если вы хотите придерживаться String.format:

Поскольку String.format использует varargs (который является массивом), вы можете просто использовать toArray(). Обратите внимание, что заполнителями в формате не могут быть {}, но что-то вроде %d, %s и т. Д.

return String.format("Q1=%s, Q2=%s, Q3=%s, Q4=%s, Q5=%s, ...", answers.toArray());
1 голос
/ 16 октября 2019

String.format не подходит для форматирования списка. Как правило, String.join более подходит.

Сначала создайте список строк, которые нужно объединить запятыми:

List<String> strings = IntStream.rangeClosed(1, answers.size())
    .mapToObj(x -> "Q" + x + "=" + answers.get(x - 1))
    .collect(Collectors.toList());

Затем вызовите String.join:

String result = String.join(", ", strings);
...