Java 8 使用Java8流迭代不同长度的列表

Java 8 使用Java8流迭代不同长度的列表,java-8,java-stream,Java 8,Java Stream,我试图迭代三个不同大小的列表,但没有得到如何从中检索数据并存储在另一个列表中的确切逻辑。 我能够处理多达两个列表,直到我向元素添加更多过滤。现在我使用3 For循环,但如果可能的话,我想使用Java8流。有人能为我推荐下面迭代的正确逻辑吗 public class CustomDto { public static void main(String... args) { List<String> list1 = Arrays.asList("Hello", "World!

我试图迭代三个不同大小的列表,但没有得到如何从中检索数据并存储在另一个列表中的确切逻辑。 我能够处理多达两个列表,直到我向元素添加更多过滤。现在我使用3 For循环,但如果可能的话,我想使用Java8流。有人能为我推荐下面迭代的正确逻辑吗

public class CustomDto {

public static void main(String... args) {

    List<String> list1 = Arrays.asList("Hello", "World!");
    List<String> list2 = Arrays.asList("Hi", "there");
    List<String> list3 = Arrays.asList("Help Me");
    Map<Integer, Object> map = new HashMap<>();

    for (int i = 0; i < list1.size(); i++) {
        List<String> list4 = new LinkedList();
        for (int j = 0; j < list2.size(); j++) {

            for (int k = 0; k < list3.size(); k++) {

                if (!(list2.get(j).equals(list3.get(k))))
                    list4.add(list2.get(j));
            }

            if (j > list4.size() - 1) {
                list4.add(null);
            }
        }
        map.put(i, list4);
    }
}
public类CustomDto{
公共静态void main(字符串…参数){
list1=Arrays.asList(“你好”,“世界!”);
list2=Arrays.asList(“Hi”,“there”);
List list3=Arrays.asList(“帮助我”);
Map Map=newhashmap();
对于(int i=0;ilist4.size()-1){
列表4.add(空);
}
}
map.put(i,列表4);
}
}
}


我只想将上面的代码转换成流,在流中我可以在另一个列表中迭代一个列表,并可以使用另一个列表的索引。

试试这个从列表中创建一个多维数组,从那里你也可以使用流

Customdto[][] listArray = new Customdto[][]{  l1.toArray(new Customdto[]{})
        ,  l2.toArray(new Customdto[]{}),  l3.toArray(new Customdto[]{})};
    int size = listArray[0].length > listArray[1].length && listArray[0].length > listArray[2].length ?listArray[0].length
            :(listArray[1].length > listArray[2].length ? listArray[1].length:listArray[2].length);
    for(int i = 0; i <size;i++)
    {
        if(listArray[0].length >i && listArray[1].length >i && listArray[2].length >i &&
                listArray[0][i].equals(listArray[1][i]) 
                && listArray[1][i].getCalendarDate().equals(listArray[2][i].getCalendarDate()))
        {
            l4.add(listArray[1][i]);
        }else
        {
            l4.add(null);
        }
    }

什么是
列表
唯一组合列表
?现在还不清楚,请重新编辑代码。你删除所有不相关的代码,给我们一个简单得多的例子如何?对我来说,不。我们仍然不知道什么是
list2
,你能用一些包含字符串的列表来做同样的例子吗?例如,我们可以在IDE中轻松验证的内容?@Federico Peralta Schaffner我已经添加了注释。感谢您的努力@Nishant,但我已经再次修改了代码,我也希望在这里使用streams,如果可能的话,尽量不使用任何循环。从您的新程序来看,我不清楚@Vinay想要实现什么。你能再解释一下吗?我想用streams迭代3个列表,并收集所有数据,包括List4中的空值。测试你的代码,然后它在map中列出2次。{0=[Hi,there],1=[Hi,there]}。我仍然不清楚你想对你的名单做什么
List<Customdto> l1 = new ArrayList<Customdto>();
        List<Customdto> l2 = new ArrayList<Customdto>();
        List<Customdto> l3 = new ArrayList<Customdto>();
        List<Customdto> l4 = new ArrayList<Customdto>();
        l1.add(new Customdto(1));
        l1.add(new Customdto(2));
        l1.add(new Customdto(3));
        l1.add(new Customdto(4));
        l2.add(new Customdto(1));
        l2.add(new Customdto(2));
        l2.add(new Customdto(3));
        l3.add(new Customdto(1));
        l3.add(new Customdto(2));
[Customdto [id=1], Customdto [id=2], null, null]
public static void main(String... args) {
    List<String> list1 = Arrays.asList("Hello", "World!");
    List<String> list2 = Arrays.asList("Hi", "there");
    List<String> list3 = Arrays.asList("Help Me");

    List<String> list4 = concat(list1, list2, list3); //you can add as many lists as you like here
    System.out.println(list4);
}

private static List<String> concat(List<String>... lists) {
    return Stream.of(lists)
            .flatMap(List::stream)
            .collect(Collectors.toList());
}
[Hello, World!, Hi, there, Help Me]