Как добавить ArrayLists в ArrayList? - PullRequest
0 голосов
/ 30 ноября 2011

Итак, я уже создал 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 в StaffFacade?

Я уже создал этот 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;
}

Конечно, я поставил дату там, потому что хотел добавитьДата внутри Списка тоже.

ОСНОВНОЕ РЕДАКТИРОВАНИЕ

Хорошо, позвольте мне попытаться выразить это так.У меня есть 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, в список BorrowFacade, который является List<Borrow> borrows;

Я очень сожалею о путанице.Если что, пожалуйста, спросите меня.Я действительно хочу, чтобы эта программа работала.

1 Ответ

2 голосов
/ 30 ноября 2011

Если у вас есть коллекция, вы можете addAll(someOtherCollection);, но я не уверен, что полностью понимаю ваш вопрос: вы ссылаетесь на «конструктор для списка заимствований», но вы показываете конструктор для класса заимствования, который не является списком.

Вы, кажется, смешиваете экземпляр отдельного класса (например, Book) с коллекцией или множеством этого класса: Book books (почему это множественное число? Что вы пытаетесь выразить?)

Edit:

Исходя из вашего комментария, я думаю, что вы пытаетесь понять, как создать объекты Borrow для размещения в списке.

Разница между составленным списком сотрудников заключается в том, что вы «знаете» сотрудников заранее - хотя это и являются постоянными значениями.

Объект «Заимствовать», по-видимому, выражает конкретное лицо, которое позаимствовало конкретную книгу, причитающуюся к определенной дате. Если это так, вам нужно где-то эти данные, например, из базы данных. Причина, по которой у вас возникают проблемы, заключается в том, что вы пытаетесь построить эти объекты на своем Фасаде вместо того, чтобы просто инкапсулировать те, которые уже существуют.

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. Не конструируйте объекты на своих фасадах.

Редактировать 2:

В ответ на ваш исправленный вопрос вы не можете этого сделать. Вы пытаетесь добавить список конкретного объекта (Staff) в список объектов другого типа (Borrow). Это просто по своей сути неправильно. Я не совсем знаю, как еще это сказать. Если бы вы попросили меня дать вам список моих любимых вопросов о переполнении стека, ожидаете ли вы найти в этом списке моего любимого пользователя переполнения стека? Это фундаментальный характер безопасности типов. Теперь, если вы попросите меня дать вам список моих Любимых вещей , тогда вполне разумно ожидать, что вы найдете там различные типы вещей - вопросы о переполнении стека, вина, продукты питания и т. Д., Потому что они концептуально имеет общий 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 в заимствованный элементFacade . По крайней мере, не напрямую - в вашем примере 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 это то, что вы ищете, я думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...