无法解析mapToInt函数java 8中的parseInt
在本教程页面中,当我编写无法解析mapToInt函数java 8中的parseInt,java,java-8,Java,Java 8,在本教程页面中,当我编写 Stream.of("a1", "a2", "a3") .map(s -> s.substring(1)) .mapToInt(Integer::parseInt) .max() .ifPresent(System.out::println); 我的程序没有任何变化。但是当我尝试做一个函数,可以像这样计算泛型列表的和 public static <E> int calculateSum(List<E> list) { int n =
Stream.of("a1", "a2", "a3")
.map(s -> s.substring(1))
.mapToInt(Integer::parseInt)
.max()
.ifPresent(System.out::println);
我的程序没有任何变化。但是当我尝试做一个函数,可以像这样计算泛型列表的和
public static <E> int calculateSum(List<E> list) {
int n = list.stream().mapToInt(Integer::parseInt).sum();
return n;
}
publicstaticintcalculatesum(列表){
int n=list.stream().mapToInt(Integer::parseInt.sum();
返回n;
}
编译器生成程序时出错无法解析方法parseInt
请帮助我找到确切的原因和解决方法。问题在于,您不能以任何方式、形状或形式保证
E
是字符串
您可以通过将映射添加到String
list.stream()
.map(Object::toString)
.mapToInt(Integer::parseInt)
.sum();
…但是你正在一个裂开的伤口上缠绷带,因为像以前一样,你不能保证你的任何字符串都可以解析为int。通过将转换添加到字符串
。。。编译器再也帮不了你了
主要的问题是,列表中应该只包含Integer
值,然后才能求和它们。更好的是,它应该只包含Number
s
public static <E extends Number> int calculateSum(List<E> list) {
return list.stream()
.mapToInt(Number::intValue)
.sum();
}
publicstaticintcalculatesum(列表){
return list.stream()
.mapToInt(编号::intValue)
.sum();
}
为什么此方法采用列表
?如果E
是Dog
?你是怎样理解一只狗的?你说“我的程序什么都没发生”是什么意思?这么清楚的解释和很好的解决方案。它帮助我解决了这个问题。使用这个通用函数,我可以计算总和,而不管数字的类型是双精度、长型还是整数etc@MrDan注意。这忽略了小数位。如果你想记录这些,你必须编写自己的累加器,这里甚至不需要类型参数。只需将参数更改为List