[英]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泛型和類型安全的基本性質,但為了追求全能的聲譽,這里有:
注意:我在這里使用StaffMember
和BorrowedItem
作為名稱來試圖說明良好命名約定的價值。
您似乎想要一個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.