'How to get the latest records from the same element in Java?
How can we do it in Java? I've a 4 employee object, I see ssn is same in them, but I want to only get such records where version is latest.
public class MapDemo {
public static void main(String[] args) {
// Get the latest Schema version
Employee employee = Employee.builder().firstName("John").lastname("Do").email("[email protected]").ssn(12345).version(1).build();
Employee employee1 = Employee.builder().firstName("John").lastname("Doe").email("john.doe@hotmail").ssn(12345).version(2).build();
Employee employee2 = Employee.builder().firstName("Jane").lastname("K").email("jane.k@gmail").ssn(45678).version(20).build();
Employee employee3 = Employee.builder().firstName("Jane").lastname("Kerr").email("jane.kerr@gmail").ssn(45678).version(28).build();
List<Employee> employees = new ArrayList<>();
employees.add(employee);
employees.add(employee1);
employees.add(employee2);
employees.add(employee3);
// I want latest version employee object here here its - employees1 and employees3
}
Employee.java
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class Employee {
private String firstName;
private String lastname;
private String email;
private int version;
private int ssn;
}
Solution 1:[1]
One way is to use Map.merge:
var ssnToEmployee = new HashMap<Integer, Employee>();
for (var emp: employees)
ssnToEmployee.merge(emp.getSsn(), emp, (o, n) -> o.getSsn() > n.getSsn() ? o : n);
for (var emp: ssnToEmployee.values())
System.out.println(emp);
Equivalently, you can use streams, in particular the version of Collectors.toMap that takes a merge function:
var ssnToEmployee = employees.stream()
.collect(Collectors.toMap(Employee::getSsn, e -> e, (o, n) -> o.getSsn() > n.getSsn() ? o : n);
(Note: the above doesn't keep the values in any particular sorted order. If you want to preserve the original order of your list, you can use a LinkedHashMap instead.)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
