Преобразование нескольких элементов списка внутри POJO в новый список на Java

#java #spring #spring-mvc #arraylist

#java #spring #spring-mvc #arraylist

Вопрос:

У меня есть POJO, заполненный списком элементов в контроллере (после отправки rest ajax). Это структура модели, которая заполняется:

 public class AllNamesDto {

 private List<Long> id;
 private List<String> firstName;
 private List<String> LastName;
 private List<Boolean> manualSubmit;
 private List<String> program;

 //getters setters
}
  

Я хотел бы извлечь все элементы списка из приведенной выше модели и сохранить их по отдельности в списке моделей, например, в следующей модели:

 public class AllNamesDtoList {

 private long id;
 private String firstName;
 private String LastName;
 private Boolean manualSubmit;
 private String program;

 //getters setters
}
  

Итак, что-то вроде

 List<AllNamesDtoList> allNamesDtoList = new ArrayList<>();
allNameDtoList.add(AllNamesDto.items);
  

Я знаю, что синтаксис неверен, просто добавляю его, чтобы быстро показать, чего я пытаюсь достичь. Моя цель — создать правильный список элементов (поскольку я не мог найти способ правильно отправить СПИСОК через ajax, просто подсписок элементов в одном POJO) для повторения и сохранения в БД.

Любая помощь приветствуется!

Комментарии:

1. Вам нужно хотя бы что-то попробовать. Вам нужен цикл. На итерации eas вам нужно получить элемент каждого списка с текущим индексом, создать экземпляр AllNamesDtoList (который вообще не является списком и, вероятно, должен называться Person или что-то в этом роде).

2. имеет ли весь список AllNamesDto одинаковой длины?

3. @Deadpool Все элементы AllNamesDto будут иметь одинаковую длину. Каждая запись представляет собой «строку» в форме.

Ответ №1:

Предполагая, что в списках порядок правильный и все они имеют одинаковый размер:

Сначала поместите конструктор с полями:

 public AllNamesDtoList(long id, String firstName, String lastName, Boolean manualSubmit, String program) {
        super();
        this.id = id;
        this.firstName = firstName;
        LastName = lastName;
        this.manualSubmit = manualSubmit;
        this.program = program;
    }
  

А затем мы берем размер одного из списков и создаем IntStream для итерации по индексам

 List<AllNamesDtoList> allNamesDtoList = new ArrayList<>();

IntStream.range(0, id.size()).forEach(index -> allNamesDtoList.add(new AllNamesDtoList(id.get(index), firstName.get(index), LastName.get(index), manualSubmit.get(index), program.get(index))));
  

и список allNamesDtoList будет полным.

Комментарии:

1. Спасибо за предложения, я сейчас попробую. Я не уверен, что вы имеете в виду ids.size()) в вашем примере, и как только я доберусь id.get(index) , я нажму на ошибку. Он не знает, на что я ссылаюсь.

2. Извините, что я вставил идентификаторы, я хотел добавить id, я просто беру один из ваших списков и смотрю на его размер. Я отредактировал эту часть id.size(), это похоже на то, что я поместил FirstName.size()

3. Когда я делаю это id.get(index), FirstName.get(index) … являются списками AllNamesDto. @SiriusBits

4. Спасибо за разъяснение. Для ids.size() . Это будет работать, только если я использую AllNamesDto.getId.size() though. Но он все еще не находит id.get(index) ?

5. id.get(index), FirstName.get(index) ….является AllNamesDto.getId.get(index), AllNamesDto.getFirstName.get(index)…