Java 8中lamba函数的行为

Java 8中lamba函数的行为,java,lambda,hashmap,Java,Lambda,Hashmap,我一直在研究leetcode问题,遇到了一个需要在HashMap中增加现有键/值对值的问题。我发现大家一致认为,在Java 8中实现这一点的最佳方法是以下代码: myMap.computeIfPresent(key, (k, v) -> v + 1); 在本例中,为什么v++无法代替v+1 第二,除了问这个问题来解决这个问题,我还能去哪里?我让代码正常工作,但我想理解为什么我的第一直觉是把v++放进去,但没有。v++的返回值是v在增加之前的值 因为在这个lambda中唯一重要的是返回值,

我一直在研究leetcode问题,遇到了一个需要在HashMap中增加现有键/值对值的问题。我发现大家一致认为,在Java 8中实现这一点的最佳方法是以下代码:

myMap.computeIfPresent(key, (k, v) -> v + 1);
在本例中,为什么
v++
无法代替
v+1


第二,除了问这个问题来解决这个问题,我还能去哪里?我让代码正常工作,但我想理解为什么我的第一直觉是把
v++
放进去,但没有。

v++的返回值是
v
在增加之前的值

因为在这个lambda中唯一重要的是返回值,这相当于只使用
(k,v)->v


如果您想使用速记
++v
可以,但是
v+1
更清晰。

v++的返回值是
v
递增之前的值

因为在这个lambda中唯一重要的是返回值,这相当于只使用
(k,v)->v


如果您想使用速记
++v
可以,但是
v+1
更清晰。

v++
返回先前的
v

例如:

int v = 5;
int newValue = v++;
// newValue is now equal to 5
如果lambda函数返回旧值
v
,那么这可能不是您想要的

如果您使用了
++v
而不是
v++
,它可能已经完成了您想要的操作,因为
++v
会增加
v
并返回新值


但是,
v+1
更清晰。您的lambda函数应该返回一个比v高的值,而不是递增
v

v++
返回先前的
v

例如:

int v = 5;
int newValue = v++;
// newValue is now equal to 5
如果lambda函数返回旧值
v
,那么这可能不是您想要的

如果您使用了
++v
而不是
v++
,它可能已经完成了您想要的操作,因为
++v
会增加
v
并返回新值


但是,
v+1
更清晰。您的lambda函数应该返回一个比v高的值,而不是递增
v

“无法工作”?怎么搞的?编译错误?异常?它编译得很好,但实际上没有增加v的值,这导致代码给出了错误的答案,因为
v++
返回
v
,然后将其增加
1
v+1
立即返回
v+1
。有可能
++v
会像
v+1
一样“无法工作”?怎么搞的?编译错误?异常?它编译得很好,但实际上没有增加v的值,这导致代码给出了错误的答案,因为
v++
返回
v
,然后将其增加
1
v+1
立即返回
v+1
。有可能
++v
会像
v+1
一样工作。接下来,为什么只需要v+1而不需要v=v+1?@Efie:
v
是lambda中的局部变量(从技术上讲是一个参数,但其行为非常类似于局部变量)。真的,修改它没什么用。lambda唯一相关的部分是它返回的值(隐式地说是表达式的返回值)。接下来,为什么只需要v+1而不需要v=v+1?@Efie:
v
是lambda中的局部变量(从技术上讲是一个参数,但其行为非常类似于局部变量)。真的,修改它没什么用。lambda唯一相关的部分是它返回的值(隐式地是表达式的返回值)。