Java List для создания вторичного списка с ограниченным размером - PullRequest
0 голосов
/ 19 ноября 2018

В проекте «Моя весна / Java» я хочу транслировать вызовы по ограниченному каналу. Предположим здесь 500 contact numbers and 10 Gateway Channels. Здесь я хочу позвонить 10 к 10 контакту и сохранить в a secondary Collection (СПИСОК / Очередь), если какой-либо вызов прерывается между заданным временем, затем приходит 11 контакт, и вторичный сбор снова становится 10. Повторяйте это снова и снова, пока все вызовы не будут полный. например:

List<T> a=(500 contacts);
List<T> b=(10 contacts calls at a time);
if any of calls cut in shortly 11th contact comes in List<T> b in it`s size become 10 again.

Может ли кто-нибудь предложить какую-либо идею для реализации этой логики?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Лучше поддерживать структуру данных очереди как вторичный сбор. Надеюсь, следующий код поможет вам.

 ArrayList<Contact>a = new ArrayList<>(500);
 Queue<Contact>b = new LinkedList<>();
 // maintain queue size of size 10
 int aIndex  = 0;
 for (int i = 0; i < 10; ++i) {
     b.add(a.get(aIndex++));
 }
 while (true) {
    if (b.isEmpty()) break; // break when all call are completed
    Contact frontValue = b.poll(); // get queue's first element and remove it
    // assign above contact to channel
    // put another contact from a to b
    if (aIndex  < a.size()) {
        b.add(a.get(aIndex++));
    }
 }
0 голосов
/ 19 ноября 2018

Вы можете иметь логику, подобную следующей, поддерживать ArrayList размера 10, если вызов завершен или разрывы между вызовами увеличивают индекс в массиве контактов и назначают этот контакт текущему индексу вызова, где он получил разрыв / завершение.

ArrayList<Contact> callList = new ArrayList<Contact>(10);
int contactIndex = 10; 
ArrayList<Contact> storedContacts = new ArrayList<Contact>(500);
// initialize contacts
while(contactIndex<500) {
    for(int i=0;i<10;i++) {
        Contact contact = callList.get(i);
        if(contact.isCallComplete() || contact.cutInBetween()) {
           callList.set(i,storedContacts.get(contactIndex)); 
           contactIndex++;
        }
        // remaining logic
    }
}
...