Java 8中lamba函数的行为
我一直在研究leetcode问题,遇到了一个需要在HashMap中增加现有键/值对值的问题。我发现大家一致认为,在Java 8中实现这一点的最佳方法是以下代码: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中唯一重要的是返回值,
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唯一相关的部分是它返回的值(隐式地是表达式的返回值)。