Я пытаюсь использовать потоки 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 имеет неправильный формат, ' отсутствует
Что в list? Трудно ответить на ваш вопрос, потому что он не включает минимально воспроизводимый пример . Пожалуйста, отредактируйте свой вопрос, чтобы включить полный набор кода, пример ввода и вывода, а также любые сообщения об ошибках.
Проблема должна быть где-то еще. Я не могу воспроизвести. Я получаю ожидаемый результат.
Возможно, вы могли бы сделать что-то вроде:
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'))
Ммммм, так что я тебя понимаю. Вам нужен результат, который можно поместить в состояние SQL "in". Я отредактировал ответ.
Я редактировал в другой раз. Теперь должно работать.
Я попытался получить запрос, как показано ниже. Выберите * из TEST_TABLE, где ID IN ('APPLE, MANGO')
Я только что запустил код, и мой вывод: выберите * из TEST_TABLE, где ID IN ('APPLE', 'MANGO')
Не могли бы вы предоставить метод, который собирает запрос?
Давайте продолжим обсуждение в чате.
Это сработало, и были некоторые проблемы с моей логикой разделения
Попробуйте что-то вроде:
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);
Я не знаю, была ли вторая закрывающая скобка в вашем ожидаемом выводе опечаткой или верна. Если вам нужна вторая скобка, просто добавьте ее выше.
Вы не знаете, что вам не хватает? Может быть, часть «разделить список»?