Изучение потоков Java, необходимых для чтения и преобразования формата строк

Я пытаюсь использовать потоки Java для чтения списка строк, разбивая список на какой-либо формат, как показано ниже. Например: это в моей строке ввода -

[APPLE, MANGO]

Я пытаюсь преобразовать вышеуказанные данные в этот формат

('APPLE', 'MANGO')

Попытка преобразовать это с помощью java-потоков с приведенным ниже кодом.

String.join(",", list.stream().map(item ->   "'"+item+"'").collect(Collectors.toList()));

Вывод, который я получаю, выглядит следующим образом

('APPLE, MANGO')

Но я ожидаю, как

('APPLE', 'MANGO')

Может ли кто-нибудь исправить мой код Java, чтобы получить формат выше требуемого?

Контекст этой проблемы

Попытка создать SQL-запрос, например

Выберите * из TEST_TABLE, где ID IN ('APPLE', 'MANGO'))

где IN CLAUSE Parameters — это ArrayList<String>();

Но с моим кодом я получаю результат как

Select * from TEST_TABLE where ID IN ('APPLE, MANGO'))

Предложение IN имеет неправильный формат, ' отсутствует

Вы не знаете, что вам не хватает? Может быть, часть «разделить список»?

Tom 20.12.2020 16:53

Что в list? Трудно ответить на ваш вопрос, потому что он не включает минимально воспроизводимый пример . Пожалуйста, отредактируйте свой вопрос, чтобы включить полный набор кода, пример ввода и вывода, а также любые сообщения об ошибках.

John Kugelman 20.12.2020 17:01

Проблема должна быть где-то еще. Я не могу воспроизвести. Я получаю ожидаемый результат.

Eritrean 20.12.2020 17:03
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
210
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Возможно, вы могли бы сделать что-то вроде:

String.format("(%s)", list.stream().map(s -> String.format("'%s'", s)).collect(Collectors.joining(",")));

ОТРЕДАКТИРОВАНО:

String.format("%s)", list.stream().map(s -> String.format("'%s'", s)).collect(Collectors.joining(",")));

ОТРЕДАКТИРОВАНО В ДРУГОЙ РАЗ:

С этой дополнительной информацией это то, что вам нужно:

String query = "Select * from TEST_TABLE where ID IN (%s)"

query = String.format(query, list.stream().map(s -> String.format("'%s'", s)).collect(Collectors.joining(",")));

System.out.println(query);

После замены вашего кода я получаю следующее: Select * from TEST_TABLE, где ID IN (('APPLE, MANGO'))

gmhk 20.12.2020 17:05

Ммммм, так что я тебя понимаю. Вам нужен результат, который можно поместить в состояние SQL "in". Я отредактировал ответ.

Marco Dalla Santa 20.12.2020 17:07

Я редактировал в другой раз. Теперь должно работать.

Marco Dalla Santa 20.12.2020 17:11

Я попытался получить запрос, как показано ниже. Выберите * из TEST_TABLE, где ID IN ('APPLE, MANGO')

gmhk 20.12.2020 17:27

Я только что запустил код, и мой вывод: выберите * из TEST_TABLE, где ID IN ('APPLE', 'MANGO')

Marco Dalla Santa 20.12.2020 17:31

Не могли бы вы предоставить метод, который собирает запрос?

Marco Dalla Santa 20.12.2020 17:45

Давайте продолжим обсуждение в чате.

gmhk 20.12.2020 18:23

это сработало, и были некоторые проблемы с моей логикой разделения

gmhk 21.12.2020 06:00

Попробуйте что-то вроде:

List<String> list = List.of("APPLE", "MANGO");
String sql = "Select * from TEST_TABLE where ID IN";
    
String params = list.stream().map(s -> "'" + s + "'")
                        .collect(Collectors.joining(",", "(", ")"));
    
sql = sql + params;
System.out.println(sql);

Я не знаю, была ли вторая закрывающая скобка в вашем ожидаемом выводе опечаткой или верна. Если вам нужна вторая скобка, просто добавьте ее выше.

Другие вопросы по теме