#java #arraylist
#java #список массивов
Вопрос:
Arraylist<Books> booksdtoList=new ArrayList<>();
List<Object[]> modelList =null;
modellist=repostory.getbooks("FICTION");
booksdtoList =mapdto(booksdtoList,modellist);
modellist=repostory.getbooks("COMIC");
booksdtoList =mapdto(booksdtoList,modellist);
Arraylist<Books> booksdtoList mapDto(Arraylist<Books> booksdtoList, List<Object[]> modelList){
Books books=null;
for (model:modelList){
books=new Books((String)model[0],(String)model[1]));
booksdtoList.add(books);
}
return booksdtoList;
}
Будет booksdtoList
содержать весь список книг или переопределит любой объект в списке?
Лучше ли отправлять ArrayList в качестве аргумента и добавлять? Если нет, пожалуйста, предложите лучший вариант.
Комментарии:
1.
add(item)
ArrayList
всегда означает «добавитьitem
в список», никогда «[возможно] заменить какой-либо существующий элемент в списке наitem
«, если это то, что вы спрашиваете…
Ответ №1:
Я не могу сказать, что на самом деле является наилучшей практикой, но я бы, вероятно, создал экземпляр списка в методе сопоставления, если ожидается, что он всегда будет пустым перед его вызовом:
List<Books> mapDTO(List<Object[]> modelList) {
List<Books> booksDTOList = new ArrayList<>();
Books books = null;
for (Object[] model : modelList){
books = new Books((String)model[0], (String)model[1]);
booksDTOList.add(books);
}
return booksDTOList;
}
Также обратите внимание, что для объекта лучше всего использовать интерфейс списка.
Для сбора всех книг из нескольких вызовов:
List<Books> booksDTOList=new ArrayList<>();
// ....
booksDTOList.addall(mapDTO(modelList1));
booksDTOList.addall(mapDTO(modelList2));
booksDTOList.addall(mapDTO(modelList3));
Если вы решите передать список в метод сопоставления, вам не нужно возвращать его, поскольку Java передается по ссылке (объект списка, который находится внутри метода сопоставления, является тем же экземпляром объекта, что и в вызывающем).
void mapDTO(Arraylist<Books> booksDTOList, List<Object[]> modelList){
Books books = null;
for (Object[] model : modelList){
books = new Books((String)model[0], (String)model[1]);
booksDTOList.add(books);
}
}
Чтобы ответить на ваш первый вопрос, добавление объектов в список (ArrayList или иначе) не приведет к перезаписи уже существующих элементов в списке.
Редактировать Я обновил все примеры с помощью метода camelCase и имен объектов (и исправил некоторые синтаксические ошибки).
Еще одно изменение, которое вы могли бы сделать (на основе доступной информации), — это изменить список моделей, чтобы он содержал строковые массивы:
void mapDTO(Arraylist<Books> booksDTOList, List<String[]> modelList){
Books books = null;
for (String[] model : modelList){
books = new Books(model[0], model[1]);
booksDTOList.add(books);
}
}
Комментарии:
1. Использование
List
вместоArrayList
обычно считается лучшей практикой в Java. Однако, что не является лучшей практикой в Java, так это использовать все имена методов в нижнем регистре. Способ Java — это camelCase, в случае имен, не относящихся к классу, с начальной строчной буквой