首页 > 解决方案 > java中的ArrayList操作

问题描述

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 作为参数发送并添加是最佳做法吗?如果没有,请推荐最好的一个。

标签: javaarraylist

解决方案


我不能说什么是最佳实践,但如果在调用它之前总是期望它为空,我可能会在映射方法中实例化 List:

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 接口。

从多个呼叫中收集所有书籍:

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 方法和对象名称更新了所有示例(并更正了一些语法错误)。

您可以做的另一项更改(基于可用信息)是将 modelList 更改为包含 String 数组:

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);
    }
}

推荐阅读