gpt4 book ai didi

如果可能的话,Java如何使用reduce函数将两个数组减少/合并为一个数组?

转载 作者:行者123 更新时间:2023-12-01 16:47:08 26 4
gpt4 key购买 nike

我有这个代码:

String[] arr1 = {"asd1", "asd2", "asd3", "asd4", "asd5", "asd6", "asd7"};
String[] arr2 = {"asd8", "asd9", "asd10", "asd11", "asd12", "asd13", "asd14"};

String[] concatenated = Stream.of(arr1, arr2)
.flatMap(Stream::of)
.toArray(String[]::new);

String[] concatenated = Stream
.concat(Arrays.stream(arr1), Arrays.stream(arr2))
.toArray(String[]::new);

String[] concatenated = Stream.of(arr1, arr2)
.reduce(new String[arr1.length + arr2.length],
(String[] a, String[] b) -> )); ///// how to proceed from here?

System.out.println(Arrays.toString(concatenated));

我正在玩,但我没有找到如何使用reduce函数将它们结合起来以获得这个结果:

[asd1、asd2、asd3、asd4、asd5、asd6、asd7、asd8、asd9、asd10、asd11、asd12、asd13、asd14]

注意:顺序并不重要,重要的是使用reduce函数将它们放入一个数组中。

可以用reduce来实现吗?

最佳答案

目前这是我想到的最好的,如果有人感兴趣:

String[] concatenated = Stream
.of(arr1, arr2)
.reduce((a, b) -> {
String[] result = Arrays.copyOf(a, a.length + b.length);
System.arraycopy(b, 0, result, a.length, b.length);
return result;
})
.orElseThrow();

Stream.of(arr1, arr2)
.reduce((a, b) -> {
String[] result = Arrays.copyOf(a, a.length + b.length);
System.arraycopy(b, 0, result, a.length, b.length);
return result;
})
.ifPresent(strings -> System.out.println(Arrays.toString(strings)));

Optional<String[]> concatenated2 = Stream
.of(arr1, arr2)
.reduce((a, b) -> {
String[] result = Arrays.copyOf(a, a.length + b.length);
System.arraycopy(b, 0, result, a.length, b.length);
return result;
});

System.out.println(Arrays.toString(concatenated));

concatenated2.ifPresent(strings -> System.out.println(Arrays.toString(strings)));

不完全是我正在寻找的东西。我很高兴看到是否有人可以使用reduce 提出一个更干净的解决方案来解决这个问题。我知道如果我将reduce 的主体放入方法引用或其他内容中,我可以使其更清晰,但事实并非如此。

关于如果可能的话,Java如何使用reduce函数将两个数组减少/合并为一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61750957/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com