如何将lambda参数转换为可用对象?

sic*_*umi 9 java lambda java-8 java-stream

我正在尝试将双打列表流式传输到a Map<Double, Double>,其中键是原始列表中的双打,并且值是一些计算值.

这就是我的代码:

// "values" is a List<Double> that was passed in
ImmutableMap<Double, Double> valueMap = values.parallelStream()
    .collect(Collectors.toMap(p -> p, p -> doThing(values, p)));

private Double doThing(List<Double>, Double p) {
    Double computedValue = 0.0;
    // Do math here with p
    return computedValue;
}
Run Code Online (Sandbox Code Playgroud)

然而,IntelliJ抱怨这p -> p不是一个有效的lambda表达式 - 它抱怨循环推理.我打电话时也遇到错误doThing,因为p是lambda参数而不是Double.

当我在调用中尝试强制p转换为无法投射时.DoubledoThing

我错过了一些非常明显的东西吗 似乎没有办法真正对我的lambda参数做任何事情......

Bub*_*tan 6

我认为这里的问题只是你的收集操作返回一个Map<Double, Double>但是类型valueMap是ImmutableMap<Double, Double>.

你也忘了给List<Double>参数命名,doThing但我认为在写这个问题时只是一个错字.

  • Afaik,IntelliJ使用`javac`就像Netbeans一样,所以我可以确认连接到Generics/Type Inference或Lambda Expressions的错误消息可能会让人感到困惑并且远离实际问题.有时,只是一个被遗忘的`),`>`或`;`会导致大量荒谬,无益的错误信息. (2认同)