/* package whatever; // don't place package name! */
import java.util.*;
import java.util.stream.Collectors;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main
(String[] args
) {
List
<Employee
> employeeList
= Arrays.
asList(new Employee
(22,
"Rajan Anand",
"Engineering", 1600000l
),
new Employee(23, "Swati Patil", "Testing", 800000l),
new Employee(27, "Vijay Chawda", "Engineering", 800000l),
new Employee(29, "Basant Mahapatra", "Engineering", 600000l),
new Employee(32, "Ajay Patel", "Testing", 350000l));
Map
<String, Optional
<Integer
>> retVal
= employeeList.
stream() .collect(Collectors.groupingBy(Employee::getDepartment,
Collectors.collectingAndThen(Collectors
.
maxBy(Comparator.
comparing(Employee
::getSalary
)),
e -> e.map(Employee::getEmployeeId))));
}
static class Employee {
private int employeeId;
public Employee
(int employeeId,
String employeeName,
String department,
Long salary
) { this.employeeId = employeeId;
this.employeeName = employeeName;
this.department = department;
this.salary = salary;
}
public int getEmployeeId() {
return employeeId;
}
public String getEmployeeName
() { return employeeName;
}
public String getDepartment
() { return department;
}
public Long getSalary
() { return salary;
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOwoKLyogTmFtZSBvZiB0aGUgY2xhc3MgaGFzIHRvIGJlICJNYWluIiBvbmx5IGlmIHRoZSBjbGFzcyBpcyBwdWJsaWMuICovCmNsYXNzIElkZW9uZQp7CnB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpICB7CgogICAgICAgIExpc3Q8RW1wbG95ZWU+IGVtcGxveWVlTGlzdCA9IEFycmF5cy5hc0xpc3QobmV3IEVtcGxveWVlKDIyLCAiUmFqYW4gQW5hbmQiLCAiRW5naW5lZXJpbmciLCAxNjAwMDAwbCksCiAgICAgICAgICAgICAgICBuZXcgRW1wbG95ZWUoMjMsICJTd2F0aSBQYXRpbCIsICJUZXN0aW5nIiwgODAwMDAwbCksCiAgICAgICAgICAgICAgICBuZXcgRW1wbG95ZWUoMjcsICJWaWpheSBDaGF3ZGEiLCAiRW5naW5lZXJpbmciLCA4MDAwMDBsKSwKICAgICAgICAgICAgICAgIG5ldyBFbXBsb3llZSgyOSwgIkJhc2FudCBNYWhhcGF0cmEiLCAiRW5naW5lZXJpbmciLCA2MDAwMDBsKSwKICAgICAgICAgICAgICAgIG5ldyBFbXBsb3llZSgzMiwgIkFqYXkgUGF0ZWwiLCAiVGVzdGluZyIsIDM1MDAwMGwpKTsKCgogICAgICAgIE1hcDxTdHJpbmcsIE9wdGlvbmFsPEludGVnZXI+PiByZXRWYWwgPSBlbXBsb3llZUxpc3Quc3RyZWFtKCkKICAgICAgICAgICAgICAgIC5jb2xsZWN0KENvbGxlY3RvcnMuZ3JvdXBpbmdCeShFbXBsb3llZTo6Z2V0RGVwYXJ0bWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGVjdG9ycy5jb2xsZWN0aW5nQW5kVGhlbihDb2xsZWN0b3JzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWF4QnkoQ29tcGFyYXRvci5jb21wYXJpbmcoRW1wbG95ZWU6OmdldFNhbGFyeSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgLT4gZS5tYXAoRW1wbG95ZWU6OmdldEVtcGxveWVlSWQpKSkpOwoKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0VmFsKTsKCiAgICB9CgoKICAgIHN0YXRpYyBjbGFzcyBFbXBsb3llZSB7CiAgICAgICAgcHJpdmF0ZSBpbnQgZW1wbG95ZWVJZDsKICAgICAgICBwcml2YXRlIFN0cmluZyBlbXBsb3llZU5hbWU7CiAgICAgICAgcHJpdmF0ZSBTdHJpbmcgZGVwYXJ0bWVudDsKICAgICAgICBwcml2YXRlIExvbmcgc2FsYXJ5OwoKCiAgICAgICAgcHVibGljIEVtcGxveWVlKGludCBlbXBsb3llZUlkLCBTdHJpbmcgZW1wbG95ZWVOYW1lLCBTdHJpbmcgZGVwYXJ0bWVudCwgTG9uZyBzYWxhcnkpIHsKICAgICAgICAgICAgdGhpcy5lbXBsb3llZUlkID0gZW1wbG95ZWVJZDsKICAgICAgICAgICAgdGhpcy5lbXBsb3llZU5hbWUgPSBlbXBsb3llZU5hbWU7CiAgICAgICAgICAgIHRoaXMuZGVwYXJ0bWVudCA9IGRlcGFydG1lbnQ7CiAgICAgICAgICAgIHRoaXMuc2FsYXJ5ID0gc2FsYXJ5OwogICAgICAgIH0KCgogICAgICAgIHB1YmxpYyBpbnQgZ2V0RW1wbG95ZWVJZCgpIHsKICAgICAgICAgICAgcmV0dXJuIGVtcGxveWVlSWQ7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgU3RyaW5nIGdldEVtcGxveWVlTmFtZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGVtcGxveWVlTmFtZTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVwYXJ0bWVudCgpIHsKICAgICAgICAgICAgcmV0dXJuIGRlcGFydG1lbnQ7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgTG9uZyBnZXRTYWxhcnkoKSB7CiAgICAgICAgICAgIHJldHVybiBzYWxhcnk7CiAgICAgICAgfQogICAgfQp9