簡體   English   中英

如何將ArrayLists添加到ArrayList?

[英]How do I add ArrayLists to an ArrayList?

所以,我已經創建了一個ArrayList <>,比如Staff List。

private List<Staff> staffs = new ArrayList<Staff>();

public StaffFacade() {
    staffs.add(new Staff("1", "James"));
    staffs.add(new Staff("2", "Mike"));
    staffs.add(new Staff("3", "Lina"));
    staffs.add(new Staff("4", "John"));
}

public List<Staff> getStaffs() {
    return staffs;
}

我想創建另一個包含Staff List(通過添加)的List,這樣我就不必在StaffFacade中添加相同的Staff了?

我已經創建了這個BorrowFacade

private List<Borrow> borrows = new ArrayList<Borrow>();

public BorrowFacade() {
    borrows.add(new Borrow()) //How do I add this?
}

public List<Borrow> getBorrows() {
    return borrows;
}

參考我上面的問題,我不知道如何添加已經創建的新員工列表。

這是借閱列表的構造函數:

public Borrow(Date dueDate, Staff staff, Book books) {
    this.dueDate = dueDate;
    this.staff = staff;
    this.books = books;
}

當然,我把Date放在那里因為我想在List里面添加Date。

主要編輯

好的,讓我試着這樣說吧。 我有4個班級,分別是StaffFacade, BorrowFacade, Borrow and Staff

這是我在StaffFacade中寫的內容

public class StaffFacade {
    private List<Staff> staffs = new ArrayList<Staff>();

    public StaffFacade() {
staffs.add(new Staff("1", "James"));
staffs.add(new Staff("2", "Mike"));
staffs.add(new Staff("3", "Lina"));
staffs.add(new Staff("4", "John"));
    }

    public List<Staff> getStaffs() {
        return staffs;
    }
}

BorrowFacade

public class BorrowFacade {
    private List<Borrow> borrows = new ArrayList<Borrow>();

    public BorrowFacade() {
        borrows.add(staffsList);
    }

    public List<Borrow> getBorrows() {
        return borrows;
    }
}

(部分,其余只是制定者和吸氣者)

public class Borrow {
    String id;
    Date dueDate;
    Staff staff;
    Book books;

    public Borrow(String id, Date dueDate, Staff staff, Book books) {
        this.id = id;
        this.dueDate = dueDate;
        this.staff = staff;
        this.books = books;
    }

員工

public class Staff{
    String id, name;

    public Staff(String id, String name) {
        this.id = id;
        this.name = name;
    }

問題出在BorrowFacade上。 我不知道如何將在StaffFacade中創建的List添加到BorrowFacade的列表中,該List<Borrow> borrows;List<Borrow> borrows;

我很抱歉這個混亂。 如果有的話請問我。 我真的希望這個程序能夠運作。

如果你有一個集合,你可以addAll(someOtherCollection); 但我不確定我是否完全理解你的問題:你引用了一個'Borrow List'的構造函數,但你顯示了一個Borrow類的構造函數,它不是一個列表。

你似乎把一個單獨的類的實例(例如Book )與一個集合或多個類混合: Book books (為什么它是復數?你想表達什么?)

編輯:

基於您的評論,我認為您正在嘗試了解如何構建要放置在列表中的Borrow對象。

構建員工名單之間的區別在於您提前“了解”員工 - 盡管這些是罐裝價值。

Borrow對象似乎表達某個特定的人在特定日期借用某本書。 如果是這樣,您需要在某處(例如從數據庫中)獲取這些詳細信息。 你遇到麻煩的原因是你試圖在Facade中構造這些對象而不是僅僅封裝已經存在的對象。

public class Facade {
    private List<Borrow> borrows = new ArrayList<Borrow>();

    // Pass the items in to the constructor
    public Facade(List<Borrow> borrows) {
        this.borrows.addAll(borrows);
    }

    // You could call this externally in a loop to populate one by one
    public void addBorrow(Borrow borrow) {
        borrows.add(borrow);
    }

}

重申:你的Staff和你的Borrow對象必須來自某個地方,所以如果它們已經在一個集合中,請使用addAll ,如果沒有,只需迭代列表並調用add 不要在Facades中構造對象。

編輯2:

在回答您修正的問題時,您不能這樣做。 您正在嘗試將特定對象(Staff)的列表添加到另一種類型的對象(Borrow)的列表中。 這本質上是錯誤的。 我不太清楚怎么說。 如果您讓我給您一個我最喜歡的Stack Overflow問題列表,您是否希望在該列表中找到我最喜歡的Stack Overflow用戶? 這是類型安全的基本特征。 現在,如果你讓我給你一個我最喜歡的東西的清單,那么期望在那里找到各種類型的東西是完全合理的 - Stack Overflow問題,葡萄酒,食品等,因為它們在概念上會共享一個共同的Favourite父母類或接口。

坦率地說,我認為你需要(重新)閱讀Java泛型和類型安全的基本性質,但為了追求全能的聲譽,這里有:

注意:我在這里使用StaffMemberBorrowedItem作為名稱來試圖說明良好命名約定的價值。

您似乎想要一個Facade類,原因我們都不理解。 好的,我們可以接受。 您的Facade類似乎包含對象列表。 您已經創建了多個類來完成此任務,除了列出哪些對象之外,兩者之間沒有明顯的區別。 救援的仿制葯:

public class Facade<T> {

    private List<T> list = new ArrayList<T>();

    public Facade(List<T> existingList) {
        list.addAll(existingList);
    }

}

這個外觀包含一個對象列表,這意味着你可以這樣做:

List<StaffMember> staffMembers= new ArrayList<StaffMember>();
// .. assume list is populated here
Facade<StaffMember> staffMembersFacade = new Facade<StaffMember>(staffMembers);

同樣,使用相同的外觀類:

List<BorrowedItem> borrowedItems = new ArrayList<BorrowedItem>();
// ... populate borrowed items
Facade<BorrowedItem> borrowedItemsFacade = new Facade<BorrowedItem<(borrowedItems);

但是您沒有將StaffMember對象添加到borrowedItemsFacade 至少不是直接 - 在你的例子中, BorrowedItem有一個Date ,它也指向StaffMember借用它。

所以此時你有兩個列表 - 一個StaffMember列表和一個BorrowedItem列表但你真的要問自己這個服務的目的是什么? 單個StaffMember是否更有意義使用List<BorrowedItem>來跟蹤他們借用的所有項目?

class BorrowedItem {
    Date dueDate;
    StaffMember borrower;
}

class StaffMember {
    String name;
    List<BorrowedItem> borrowedItems;
}

現在,這提供了向StaffMember添加功能的機會,如下所示:

List<BorrowedItem> getOverdueItems() {
    List<BorrowedItem> overdueItems = new ArrayList<BorrowedItem>();

    Date today = getTodaysDate(); // Calendar.getInstance etc.

    for (BorrowedItem borrowedItem : borrowedItems) {
        Date dueDate = borrowedItem.getDueDate();
        if (today.after(dueDate)) {
            overdueItems.add(borrowedItem);
        }
    }

    return overdueItems;
}

您是否看到如何在這些類之間創建有意義的關系,以便有任何有用的事情發生?

然后,您可以添加功能,讓某人將物品借給他人,或從某人那里拿走某些東西等。

所以,是的, Collections.addAll是你正在尋找的,我想。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM