Lambda没有解析类型

时间:2017-11-10 10:00:55

标签: java lambda java-stream

我看到一个奇怪的问题,其中eclipse没有识别我的lambda参数

public static void main(String[] args) {
    int[] array = {23,43,56,97,32};
    int sum1 = Arrays.asList(array).stream().reduce(0, (total, e) -> total + e).intValue(); 
}

我得到total并且e无法解析为变量 我看到一些例子,其中'total'和'e'被用作参数而没有声明。
但是,就我而言 - 它在没有声明的情况下拒绝编译 这是什么问题?

3 个答案:

答案 0 :(得分:5)

对于基本数组,

111Grapes[返回Arrays.asList(array),其单个元素就是该数组。

更改

List

Arrays.asList(array).stream()

请注意,这将提供给Arrays.stream(array) ,而不是IntStream,因此最后不需要Stream<Integer>

intValue()

对于int sum1 = Arrays.stream(array).reduce(0, (total, e) -> total + e); 你可以写:

Stream<Integer>

,整行将是:

Arrays.stream(array).boxed()

当然,您可以通过以下方式获得总和:

int sum1 = Arrays.stream(array).boxed().reduce(0, (total, e) -> total + e).intValue ();

答案 1 :(得分:3)

IntStream.of(...)

你应该这样:

int sum1 = Arrays.stream(array).sum();

答案 2 :(得分:0)

只需使用:

int sum1 = Arrays.stream(array).sum ();

我已将生成int[] array = {23,43,56,97,32}; int sum1 = Arrays.stream(array).reduce(0, (total, e) -> total + e); 的{​​{1}}更改为Arrays.asList(...).stream()(或Stream<int[]>)。

除此之外,您还可以将缩减简化为:

Arrays.stream(...)