Итак, я новичок в Java, и Play все еще время от времени путается в квазиобъектно-ориентированном программировании...
Мне нужно преобразовать строку с разделителями с повторяющимися значениями в список объектов, также с этими повторяющимися значениями, в том же порядке, что и строка.
Пример:
У меня есть форма, в которой пользователь отправляет строку с разделителями-пробелами. Например:
http://www.feedme.com?food=apple+orange+banana+apple+grape+apple
это идет к
public static List<Food> getFoodList(String foodString) {
foodString = foodString.trim();
List<String> foods = Arrays.asList(foodString.split("\\s+"));
List<Food> foodList = Food.find("name IN (:foods)").bind("foods", foods).fetch();
return foodList;
}
Я вывожу цикл списка String на экран и получаю ожидаемое: яблоко, апельсин, банан, яблоко, виноград, яблоко.
Я печатаю значение Food.name для каждого в цикле foodList и получаю: Виноград Яблоко Банан Апельсин
Это явно проблема с IN в предложении WHERE, так как это ожидаемое поведение.
Итак, мое текущее решение состоит в том, чтобы вручную заполнить список, прокручивая список и выполняя следующие действия для каждой строки в списке продуктов.
List<Food> foodList = new ArrayList<Food>(foods.size());
for ( String name: foods ){
Food food = Food.find("byName", name).first();
foodList.add(food);
}
Это работает так, как я хочу, но просто не кажется очень элегантным или эффективным. Требуются дубликаты, поэтому я думаю, что это исключает IN. У кого-нибудь есть идеи получше? Если ответ отрицательный, то тоже буду признателен!
Большое спасибо.