Return a default value from a Map in Java 8
October 22, 2016 Leave a comment
Consider the following Employee class:
public class Employee { private UUID id; private String name; private int age; public Employee(UUID id, String name, int age) { this.id = id; this.name = name; this.age = age; } public UUID getId() { return id; } public void setId(UUID id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
Let’s put some Employee objects into a hash map:
Map<Integer, Employee> employeeMap = new HashMap<>(); employeeMap.put(1, new Employee(UUID.randomUUID(), "Elvis", 50)); employeeMap.put(2, new Employee(UUID.randomUUID(), "Marylin", 18)); employeeMap.put(3, new Employee(UUID.randomUUID(), "Freddie", 25)); employeeMap.put(4, null); employeeMap.put(5, new Employee(UUID.randomUUID(), "Mario", 43)); employeeMap.put(6, new Employee(UUID.randomUUID(), "John", 35)); employeeMap.put(7, new Employee(UUID.randomUUID(), "Julia", 55));
Note the null value for key 4. Let’s also define a default Employee object:
Employee defaultEmployee = new Employee(UUID.fromString("00000000-0000-0000-0000-000000000000"), "", -1);
Java 8 includes a new method called “getOrDefault” on the Map interface. It accepts a key, like the “get” method on the Map, but it also accepts a default object that will be returned if the key does not exist.
Can you guess what the below code will return?
Employee employee = employeeMap.getOrDefault(4, defaultEmployee);
“employee” will be null of course, as key 4 exists and its value is null. However, if you simply call the “get” method with 4 as the key input then you don’t know exactly how to interpret the null result: does 4 exist as key in the map and its value is null or does the key 4 not exist at all in the map? With getOrDefault returning 0 in this case you can be 100% sure that a null response is unambiguous.
Let’s see what the below bit of code returns:
Employee employee = employeeMap.getOrDefault(12, defaultEmployee);
This time it returns the default employee as the key 12 does not exist in the map.
View all posts related to Java here.