我想使用Streams在Java 8中组合3个列表。实现这一目标并不困难。以下代码可以执行此操作:
List<IntVar> combined = Stream.of(listA, listB, listC).flatMap(Collection::stream).collect(Collectors.toList());
现在我要求组合列表的元素遵循简单的顺序。前提条件是所有列表都具有相同的大小。
想象一下3个列表,每个列表包含4个元素:
组合List的元素应遵循以下顺序:
a1,b1,c1,a2,b2,c2,a3,b3,c3,a4,b4,c4
我想你明白了。 有没有办法在Java 8中使用Streams做到这一点?
答案 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));
});