Как чередовать списки - PullRequest
1 голос
/ 23 марта 2012

У меня в голове есть кое-что, что беспокоит меня уже довольно давно, и надеюсь, что смогу помочь некоторым добрым душам ...: D

В любом случае, вот что я хочу сделать:

У меня действительно есть номер списка, скажем,

List<String> a = {"for testA1", "for testA2", "for testA3"};
List<String> b; = {"for testB1", "for testB2", "for testB3"};
List<String> c; = {"for testC1", "for testC2", "for testC3"};

И у меня есть список массивов объектов, в которые я хочу добавить эти строки, то есть

List<ObjectA> thislist = new ArrayList<ObjectA>();

В моем классе ObjectA у меня есть:

public class ObjectA{

   String testA;
   String testB;
   String testC;
}

Мой окончательный результат должен быть:

List<ObjectA> - 
  • testA1
  • testB1
  • testC1

  • testA2

  • testB2
  • testC2

  • testA3

  • testB3
  • testC3

Как я могу настроить эти строки в моем объекте из данного индивидуального списка?

Извините за мойплохой английский, надеюсь, это понятно.

Я имел в виду это , но не совсем понял.

Мой код был

List<String> aList = ....;
List<String> bList = ....;
List<String> cList = ....;

List<ObjectA> someList = new ArrayList<ObjectA>();

for(String a: aList){
    ObjectA obj = new ObjectA();    
    obj.setTestA(a);                                
}

ListIterator litr = someList.listIterator();
while(litr.hasNext()) {
    ObjectA element = (ObjectA) litr.next();
   // I wanna loop List<String> bList and add element.setTestB but it doesn't work.
   // This is what I wanna do...
}

Ответы [ 4 ]

6 голосов
/ 23 марта 2012
Iterator<String> aIt = a.iterator();
Iterator<String> bIt = b.iterator();
Iterator<String> cIt = c.iterator();

List<ObjectA> thislist = new ArrayList<ObjectA>();


// assumes all the lists have the same size
while(aIt.hasNext())
{
    Object A o = new ObjectA(aIt.next(), bIt.next(), cIt.next());
    thisList.add(o);
}
0 голосов
/ 23 марта 2012

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

public class Triplet{
    private final String jedi;
    private final String sith;
    private final String padawan;

    public Triplet(String jedi, String sith, String padawan){
        this.jedi = jedi;
        this.sith = sith;
        this.padawan = padawan;
    }
}

Мы можем определить итератор сопоставления:

public static class TripletIterator implements Iterator<Triplet>{

    Iterator<String> jedis;
    Iterator<String> siths;
    Iterator<String> padawans;

    public TripletIterator(List<String> jedis, List<String> sith, List<String> padawns){
        this.jedis = jedis.iterator();
        this.siths = sith.iterator();
        this.padawans = padawns.iterator();
    }

    @Override
    public boolean hasNext() {
        return jedis.hasNext() && siths.hasNext() && padawans.hasNext();
    }

    @Override
    public Triplet next() {
        return new Triplet(jedis.next(), siths.next(), padawans.next());
    }

    @Override
    public void remove() {
       throw new UnsupportedOperationException();
    }
}

Тогда вы можете просто:

List<String> jedis = asList("Obiwan","Yoda","Luke");
List<String> siths = asList("Lord Sidious", "Darth Mul", "Darth Vader");
List<String> padawans = asList("Anakin", "Jarjar", "Poncho");

Iterator<Triplet> iter = new TripletIterator(jedis, siths, padawans);
while(iter.hasNext()){
    Triplet t = iter.next();
    System.out.println(t);
}
0 голосов
/ 23 марта 2012
for(int i = 0; i < 3; i++) {
    ObjectA oa = new ObjectA();

    oa.testA = a[i];
    oa.testB = b[i];
    oa.testC = c[i];

    thislist.Add(oa);
}
0 голосов
/ 23 марта 2012
// do all the assertions to check that the sizes are the same
if (a.size() != b.size() || a.size() != c.size()) {
  throw new IllegalStatException("Wrong size");
}

List<ObjectA> objects = new ArrayList<ObjectA>();
for (int i = 0; i < a.size(); i++) {
  String aStr = a.get(i);
  String bStr = b.get(i);
  String cStr = c.get(i);

  ObjectA obj = new ObjectA(aStr, bStr, cStr);
  objects.add(obj);
}

Комментарий ниже дает хорошее замечание - это может быть решение O (n ^ 2) в случае связанного списка (или любого другого списка, который имеет O (n) время доступа для доступа к произвольным элементам)

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