我一直在研究leetcode问题,遇到一个问题,需要在HashMap中增加现有键/值对的值。我发现共识是,Java 8中最好的方法是以下代码:
myMap.computeIfPresent(key, (k, v) -> v + 1);
在此示例中,为什么v++
不能代替v + 1
起作用?
第二,除了问这个问题之外,我还能去哪里?我的代码可以工作,但想了解为什么我的第一个直觉是v++
不起作用。
答案 0 :(得分:3)
v++
的返回值是{em> 之前的v
的值。
由于在此lambda中唯一重要的是返回值,因此等效于仅使用(k, v) -> v
。
如果您想使用简写方式,++v
可以使用,但是v + 1
更清楚。
答案 1 :(得分:1)
v++
返回v
的前一个值。
例如:
int v = 5;
int newValue = v++;
// newValue is now equal to 5
如果lambda函数返回旧值v
,则可能不是您想要的。
如果您使用++v
而不是v++
,则它可能已完成您想要的操作,因为++v
递增v
并返回 new 值。
但是v+1
更清晰。您的lambda函数应该返回比v高的一个,而不是递增v
。