解释lambda表达式

时间:2017-11-06 04:45:38

标签: java lambda java-8

我有一个包含lambda表达式的方法:

public int noOfComplementaryPairs1(int arr[], int k) {

    Map<Integer, Integer> map = new HashMap<Integer, Integer>();

    for (int i = 0; i < arr.length; i++) {
        map.merge(k - arr[i], 1, Integer::sum);
    }

    return Arrays.stream(arr).map(element -> map.getOrDefault(element, 0)).sum();
}

有人可以向我解释最后两行是什么意思吗?我不是Java的新手,但有时我会对像这样的表达式感到困惑。

1 个答案:

答案 0 :(得分:3)

map.merge...:第一个参数是地图中的键,第二个参数是地图中当不存在此键时的值,第三个参数是BiFunction告诉你如何合并两个键,因为你不能在Map中有两个具有相同值的键。

最后一行也非常简单:您正在流式传输数组,使用:map.getOrDefault(element, 0)映射该数组的每个元素,这意味着从map获取值key = element或如果不存在则默认值为零;然后sum他们全部。