当前位置: 首页 > 知识库问答 >
问题:

为什么reduce合并器函数没有执行?[副本]

严永丰
2023-03-14
public class PrdefinedCollectors {
    public static void main(String[] args) {
        Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6);
        List<Integer> dataHolder = new ArrayList<Integer>();
        List<Integer> numbers = stream.reduce(dataHolder, 
            (List<Integer> dataStore, Integer data) -> {
                    System.out.println(data + " ->: " + dataStore);
                    dataStore.add(data);
                    return dataStore;
                },
            (List<Integer> listOne, List<Integer> listTwo) -> {
                    System.out.println("ListOne Data :" + listOne + " List Two data :" + listTwo);
                    listOne.addAll(listTwo);
                    return listOne;
                });

        System.out.println(numbers);
    }
}
1 ->: []
2 ->: [1]
3 ->: [1, 2]
4 ->: [1, 2, 3]
5 ->: [1, 2, 3, 4]
6 ->: [1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
System.out.println("List One Data: " + listOne + " List Two data: " + listTwo);

共有1个答案

轩辕海
2023-03-14

这是因为您没有使用parallelstream()

组合器仅用于并行流。

但这并不是代码中唯一的问题,reduce应该处理不可变数据--如果是并行流,您的代码就会失败。这对于collect是有效的,但是对于reduce,您需要将其更改为:

 List<Integer> numbers = stream
            .parallel()
            .reduce(
                    new ArrayList<>(),
                    (list, data) -> {
                        ArrayList<Integer> newList = new ArrayList<>(list);
                        newList.add(data);
                        return newList;
                    },

                    (left, right) -> {
                        ArrayList<Integer> newList = new ArrayList<>(left);
                        newList.addAll(right);
                        return newList;
                    });
 类似资料:
  • 我有一个C++实验室,问题是:用户应该为X输入一个值(X是所持有的测试数)。如果x<15,程序不计算任何东西。如果X在16和30之间,程序应计算C=1.0/10.0*(24a);如果X>30,程序应计算C=0.15(24*a)。我的multiple if代码可以工作,但是当我输入X的值时,方程没有解出。有人知道吗??

  • 我运行了一个简单的wordcount MapReduce示例,在组合器输出中添加一个小变化的组合器,组合器的输出不被Reducer合并。场景如下 context.write(t,new IntWritable(1));//添加了我自己的输出 我运行了一个简单的wordcount MapReduce示例,在组合器输出中添加一个小变化的组合器,组合器的输出不被Reducer合并。场景如下:在组合器中,

  • 问题内容: PostgreSQL文件说: SQL函数的整个主体在执行任何函数之前都会被解析。 虽然SQL函数可以包含 更改系统目录的命令 (例如),但是在对函数中的后续命令进行语法分析时,这些命令的效果将不可见。因此,例如, 如果打包到单个SQL函数中将无法按预期工作 ,因为解析命令时foo尚不存在。 在这种情况下,建议使用PL / pgSQL代替SQL函数。 为什么“在这种情况下,建议使用PL

  • 我试图理解object.clone()在Java中是如何工作的。我偶然发现了以下事实: null 疑点: 为什么Java设计者会做出这样的设计选择并这样实现它?为什么不在本身中定义,如果实现类不为提供实现,那么将产生编译时错误。 Q2.为什么要在运行时检查实例是否实现? 附:我知道在一个问题中问多个问题是一个坏主意。但这些都是密切相关的问题。我可以问一个问题,比如“为什么不包含?”但是,我觉得,为

  • 我正在尝试使用JS SDK在Dropbox上上传一个文件。下面是我试图调用函数的html代码: 这是定义函数的文件 但是,由于我不知道的原因,我的函数不能被调用。我得到错误“referenceerror:Dropupload is not defined”,我不知道这是否与问题有关,但我得到另一个错误:“syntaxerror:import declarations may only at top