Манипулирование списком массивов в java

#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, в случае имен, не относящихся к классу, с начальной строчной буквой