通过Java流复制数组中的每个元素

5

我有一些数组

int[] a = {1,2,3,4,5};

我该如何使用流获取另一个包含重复元素的数组?我的意思是像这样:
result = Stream.of(a).map(...)
// after that result = {1,1,2,2,3,3,4,4,5,5}
3个回答

6

您需要使用flatMap而不是map。像这样:

int[] a = { 1, 2, 3, 4, 5 };
int[] result = IntStream.of(a).flatMap(x -> IntStream.of(x, x)).toArray();
System.out.println(Arrays.toString(result));

输出(按要求)

[1, 1, 2, 2, 3, 3, 4, 4, 5, 5]

对不起,我在90分钟内不能再提出另一个问题了。 你能帮我解决另一个问题吗? 如果a是一个数组的数组呢? int[][] a = {{1, 3, 2}, {2, 1, 4}, {2, 3, 3}, {3, 4, 2}, {4, 2, 1}}; - Артур Гудиев
@АртурГудиев 这是一个非常不同的情况,在任何人回答之前 - 你必须告诉我们你期望什么结果。此外,实际上尝试将你在这里得到的答案应用到那个问题上。 - Elliott Frisch
我需要从每个 {x,y,z} 数组中获取 2 个数组,即 {x,y,z} 和 {y,x,z}。换句话说,我使图形无向化。 - Артур Гудиев
@АртурГудиев 已经过去了50分钟,但好吧。使用流构建数组数组并不是一件简单的事情。您可以执行Object[] b = IntStream.range(0, a.length) .mapToObj(x -> new int[][] { { a[x][0], a[x][1], a[x][2] }, { a[x][1], a[x][0], a[x][2] } }) .toArray(); 这将生成您所需的数组。 - Elliott Frisch

3
以下是一种方法:

以下是一种实现方式:

int[] result = Arrays.stream(a)
                     .flatMap(e -> IntStream.of(e,e))
                     .toArray();

或者:

int[] result = Arrays.stream(a)
                     .flatMap(e -> IntStream.generate(() -> e).limit(2))
                     .toArray();

是的,谢谢。不幸的是,另一个人比您更早地回答了,所以我会将他的答案标记为正确答案。但如果我可以将您们两位都标记为正确答案,我会这样做。 - Артур Гудиев
@АртурГудиев 请接受Elliott的请求,他比我先发了这条消息 :)。 - Ousmane D.
不好意思,Stackoverflow不允许我在90分钟内再提问。你能帮我解决数组的情况吗? int[][] a = {{1, 3, 2}, {2, 1, 4}, {2, 3, 3}, {3, 4, 2}, {4, 2, 1}}; 在这种情况下,IntStream无法工作。 - Артур Гудиев

1
我希望这可以帮助你。
int[] a = {1, 2, 3, 4, 5};
IntStream.concat(Arrays.stream(a), Arrays.stream(a)).sorted().forEach(element -> System.out.print(element));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接