Java 如何交错列表

Java 如何交错列表,java,arraylist,collections,Java,Arraylist,Collections,我脑子里有些东西已经困扰了我很长一段时间了,希望我能得到一些善良的灵魂的帮助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

我脑子里有些东西已经困扰了我很长一段时间了,希望我能得到一些善良的灵魂的帮助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> - 
测试1 测试B1 测试C1

测试2

测试B2 测试C2

测试3

测试B3 测试C3 如何在给定的单个列表中设置对象中的这些字符串

对不起,我的英语不好,我希望这是可以理解的

我心里有个想法,但不太明白

我的密码是

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...
}
下面的注释说明了一个很好的观点-对于链接列表或任何其他具有访问任意元素的时间限制的列表,这可能是一种基于^2的解决方案

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);
}

下面的注释说明了一个很好的观点-如果链接列表或任何其他列表在访问时间上可以访问任意元素,那么这可能是一个基于^2的解决方案,假设您映射的对象是

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);
}
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);
}

好吧,假设您映射的对象是

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);
}

除非您知道getint是一个O1操作,否则最好使用迭代器。除非您知道getint是一个O1操作,否则最好使用迭代器。太棒了。对于任意列表的情况,比我的解决方案更好。对于任意列表的情况,比我的解决方案要好