我有这个代码:
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/