合并后将3个列表与特殊订单合并(使用Streams)

时间:2016-08-19 08:26:54

标签: java java-8 java-stream

我想使用Streams在Java 8中组合3个列表。实现这一目标并不困难。以下代码可以执行此操作:

List<IntVar> combined = Stream.of(listA, listB, listC).flatMap(Collection::stream).collect(Collectors.toList());

现在我要求组合列表的元素遵循简单的顺序。前提条件是所有列表都具有相同的大小。

想象一下3个列表,每个列表包含4个元素:

  • 列表A包含 a1 a2 a3 a4
  • 元素
  • 列表B包含 b1 b2 b3 b4
  • 元素
  • 列表C包含 c1 c2 c3 c4
  • 元素

组合List的元素应遵循以下顺序:

a1,b1,c1,a2,b2,c2,a3,b3,c3,a4,b4,c4

我想你明白了。 有没有办法在Java 8中使用Streams做到这一点?

1 个答案:

答案 0 :(得分:3)

如果所有列表的大小相同(我们称之为n),那么您可以使用IntStream来模拟for循环的作用:

List<String> x = Arrays.asList("a1", "a2", "a3");
List<String> y = Arrays.asList("b1", "b2", "b3");
List<String> z = Arrays.asList("c1", "c2", "c3");
int n = x.size();
List<String> list = new ArrayList<>();
IntStream.range(0, n)
         .boxed()
         .forEach(i -> { list.add(x.get(i)); 
                         list.add(y.get(i)); 
                         list.add(z.get(i)); 
                        });