ERROR - java.lang.ClassCastException - Lambda - java.util.stream.Collectors.lambda$summingInt

Error

 java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at HelloJava8.lambda$0(HelloJava8.java:20)
at HelloJava8$$Lambda$1/2055281021.applyAsInt(Unknown Source)
at java.util.stream.Collectors.lambda$summingInt$115(Collectors.java:467)
at java.util.stream.Collectors$$Lambda$3/804564176.accept(Unknown Source)
at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1540)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:512)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at HelloJava8.main(HelloJava8.java:20)


Error Type

Runtime Exception ( Java 8 )

Sample Code

Set<String> strSet = new HashSet<String>();
strSet.add("1");
strSet.add("2");
strSet.add("3");
strSet.add("4");
System.out.println(strSet.stream().collect((Collectors.summingInt(p->(Integer)p))));

   
Cause

Couldn't cast from String to Integer during Lambda Summing.

Resolution

Specify the Predicate as the filter function argument.

Set<Integer> intSet = new HashSet<Integer>();
intSet.add(1);
intSet.add(2);
intSet.add(3);
intSet.add(4);
System.out.println(intSet.stream().collect((Collectors.summingInt(p->(Integer)p))));