Java HashMap.compute()
In this tutorial, we will learn about the Java HashMap.compute() function, and learn how to use this function to compute a new value for a specific key, with the help of examples.
compute()
HashMap.compute() computes a mapping for the specified key and its current mapped value (or null if there is no current mapping).
The syntax of compute() function is
compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
where
Parameter | Description |
---|---|
key | The key with which the specified value is to be associated. |
remappingFunction | The mapping function to compute a value for the specified key. |
Returns
The function returns V
Examples
1. compute() basic example
In this example, we will initialize a HashMap with mappings from String to Integer. Using compute() function, we will compute a value for key "C"
, such that the new value is square of the existing value. Also, we shall do the same computation for key "D"
.
Java Program
import java.util.HashMap;
public class Example{
public static void main(String[] args) {
HashMap<String,Integer> hashMap = new HashMap<>();
hashMap.put("A",1);
hashMap.put("B",2);
hashMap.put("C",3);
hashMap.put("D",4);
System.out.println("Before compute : " + hashMap);
hashMap.compute("C", (k,v) -> v = v*v );
hashMap.compute("D", (k,v) -> v = v*v );
System.out.println("After compute : " + hashMap);
}
}
Output
Before compute : {A=1, B=2, C=3, D=4}
After compute : {A=1, B=2, C=9, D=16}
2. compute() for All keys
In this example, we will initialize a HashMap with mappings from String to Integer. Using compute() function, we will replace all the values with their squares using HashMap.forEach() and compute() methods.
Java Program
import java.util.HashMap;
public class Example{
public static void main(String[] args) {
HashMap<String,Integer> hashMap = new HashMap<>();
hashMap.put("A",1);
hashMap.put("B",2);
hashMap.put("C",3);
hashMap.put("D",4);
System.out.println("Before compute : " + hashMap);
hashMap.forEach((key, value) -> {
hashMap.compute(key, (k,v) -> v = v*v );
});
System.out.println("After compute : " + hashMap);
}
}
Output
Before compute : {A=1, B=2, C=3, D=4}
After compute : {A=1, B=4, C=9, D=16}
3. compute() – Return Value
In this example, we will store the value returned by compute(), and print to console.
The datatype of return value is the datatype of values of mappings in the HashMap. In this example, the datatype of the the return value is Integer.
Java Program
import java.util.HashMap;
public class Example{
public static void main(String[] args) {
HashMap<String,Integer> hashMap = new HashMap<>();
hashMap.put("A",1);
hashMap.put("B",2);
hashMap.put("C",3);
hashMap.put("D",4);
int x = hashMap.compute("C", (k,v) -> v = v*v );
System.out.println("Return Value : " + x);
}
}
Output
Return Value : 9
4. compute() when Key is not Present
In this example, we will initialize a HashMap with mappings from String to Integer. We will try to call compute() function for a key "M"
that is not present in the HashMap. Since the key is not present in HashMap, compute() should throw java.lang.NullPointerException.
Java Program
import java.util.HashMap;
public class Example{
public static void main(String[] args) {
HashMap<String,Integer> hashMap = new HashMap<>();
hashMap.put("A",1);
hashMap.put("B",2);
hashMap.put("C",3);
hashMap.put("D",4);
System.out.println("Before compute : " + hashMap);
hashMap.compute("M", (k,v) -> v = v*v );
System.out.println("After compute : " + hashMap);
}
}
Output
Before compute : {A=1, B=2, C=3, D=4}
Exception in thread "main" java.lang.NullPointerException
at Example.lambda$0(Example.java:12)
at java.base/java.util.HashMap.compute(Unknown Source)
at Example.main(Example.java:12)
Conclusion
In this Java Tutorial, we have learnt the syntax of Java HashMap.compute() function, and also learnt how to use this function with the help of examples.