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

标签 java arrays functional-programming reduce

我有这个代码:

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/

相关文章:

java - 如何从扫描仪读取字符串,并将每个字母转换为不同的值?

arrays - 如何使用 NSKeyedArchiver swift 将复杂的 Arrayobjects 保存到设备

python - 根据其他数组的阈值创建新的 2d numpy 数组

scala - 何时使用单例对象以及何时在 scala 中使用实际对象

java - 如何更改不是我在 RecycleView 中单击的项目?

java - 为什么 (byte) 400000 和 (byte) -400000 结果都是 -128

java - 如何在 java 9 中声明模块

c++ - 为什么这不能在 Code::Blocks 中用 mingw 编译?

xpath - 使用 XQuery 计算序列中的连续重复元素

sql - 是否有任何数据类型可以在 sql server 中存储超过 2 gb 的数据