Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法解析mapToInt函数java 8中的parseInt_Java_Java 8 - Fatal编程技术网

无法解析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