Java 8中的lamba函数的行为

时间:2018-07-20 12:13:11

标签: java lambda hashmap

我一直在研究leetcode问题,遇到一个问题,需要在HashMap中增加现有键/值对的值。我发现共识是,Java 8中最好的方法是以下代码:

myMap.computeIfPresent(key, (k, v) -> v + 1);

在此示例中,为什么v++不能代替v + 1起作用?

第二,除了问这个问题之外,我还能去哪里?我的代码可以工作,但想了解为什么我的第一个直觉是v++不起作用。

2 个答案:

答案 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