Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > List


Автор: Predator83 19.4.2007, 15:57
Привет всем!
Есть класс 

Код

class Item {
  String descr;
  String title;
  Date   date;

  // Далее get, set методы
}


Есть два List с этими объектами, хочу сделать третий List в котором бы чередовались записи из этих двух List'ов.
Например заполнялось по 2 записи из одного List по 3 записи из другого Listи т.д. (размер Listов разный)

Автор: Predator83 19.4.2007, 16:17
Типа такого, но что-то очень все тяжело

Код

     int k = 0;
     List rezultList = new ArrayList();
     for (int i = 0; i < rssList.size(); i++) {
         if (k != dbList.size) {
             if (i % 5 == 0) {
                 // Copy 5 object             
                 for (int u = 0; u < 5; u++) {
                     if (k != dbList.size()) {
                         rezultList.add(dbList.get(k));
                         k ++;
                     }
                 }
             }     
         }
         rezultList.add(rssList.get(i));
     }

Автор: W0LF 19.4.2007, 16:18
А в чем собственно проблема? ты можешь вернуть массивом все items первого list, второго listи потом как тебе надо заполнить третий list

Автор: Predator83 19.4.2007, 16:31
Ну вот сверху я написал процесс копирования но мне он показался дрстаточно сложным.

Автор: nornad 19.4.2007, 21:21
Код

int ary1items = 2;
int ary2items = 3;
int totalStepItems = ary1items + ary2items;
int ary1count = rssList.size();
int ary2count = dbList.size();
int totalCount = ary1count + ary2count;
int ary1index = 0;
int ary2index = 0;
for( int i = 0; i < totalCount; ++i ) {
  if ( (i % totalStepItems) < ary1items ) {
    rezultList.add( rssList.get( ary1index++ ) );
  } else {
    rezultList.add( dbList.get( ary2index++ ) );
  }
}

Только если в одном массиве элементов не хватит - оно ругнётся. smile
Чтобы не ругалось, надо так:
Код

for( int i = 0; i < totalCount; ++i ) {
  if ( (i % totalStepItems) < ary1items ) {
    if ( ary1index < ary1count )
      rezultList.add( rssList.get( ary1index++ ) );
    else
      rezultList.add( dbList.get( ary2index++ ) );
  } else {
    if ( ary2index < ary2count )
      rezultList.add( dbList.get( ary2index++ ) );
    else
      rezultList.add( rssList.get( ary1index++ ) );
  }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)