gpt4 book ai didi

java - Java Stream中执行Reduce操作出现异常

转载 作者:行者123 更新时间:2023-12-01 19:41:54 24 4
gpt4 key购买 nike

我是 Java 8 的新手,在下面的示例中,我创建了一个 Map,其键值为 String,值为整数的 ArrayList。

Map<String,List<Integer>> mapLstInteger=new HashMap<String,List<Integer>>() {
{
put("A",Arrays.asList(1,2,3));
put("B",Arrays.asList(4,5,6));
put("C",Arrays.asList(7,8,9));
}
};

我编写了下面的代码来对每个键执行 arrayList 元素的求和,并尝试将求和值存储在单独的 ArrayList 中。

List<Integer> sumLst=mapLstInteger.entrySet().stream().map(e->e.getValue())
.reduce((inputLst, outputLst)->{
int sum=0;
for(int count=0;count<inputLst.size();count++)
{
sum=sum+inputLst.get(count);
}
outputLst.add(sum);
return outputLst;
}).get();

当我尝试执行以下代码时,出现异常。

Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.add(AbstractList.java:148) at java.util.AbstractList.add(AbstractList.java:108) at com.calculation.sum.client.Client.lambda$1(Client.java:43) at java.util.stream.ReduceOps$2ReducingSink.accept(ReduceOps.java:123) at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) at java.util.HashMap$EntrySpliterator.forEachRemaining(HashMap.java:1696) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.util.stream.ReferencePipeline.reduce(ReferencePipeline.java:479) at com.calculation.sum.client.Client.main(Client.java:37)

任何人都可以让我知道我在上面的代码中做错了什么>

最佳答案

首先您使用Arrays::asList其记录为返回由指定数组支持的固定大小列表,我认为固定大小应该告诉您做错了什么。

比您使用创建 HashMap 的反模式就地 - 通过创建一个扩展 HashMap 的匿名内部类,通过那个Map<String,List<Integer>> mapLstInteger=new HashMap<String,List<Integer>>().... .

那么,您违反了 reduce 的规范,它应该始终返回一个新对象,但你总是放入 outputLst .

然后,您正在创建一个 Map当您关心的只是它的值时 - 创建一个 List<List<Integer>>在这种情况下。

根据您的代码,即使您的句子我编写了下面的代码来对每个键执行 arrayList 元素的求和也是不正确的。如果我是你,我只会下定决心想要实现的实际目标,然后尝试去做。

关于java - Java Stream中执行Reduce操作出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55092229/

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