[英]How do I convert a List<Employee> to Map<Employee, List<String>> using java8?
[英]How to sort Employee object based on salary,name in ascending order from Map<String, Map<String, ArrayList<Employee>>>using Java8 streams API
Map<String, Map<String, ArrayList<Employee>>> map = new HashMap<String, Map<String, ArrayList<Employee>>>();
ArrayList<Employee> list = new ArrayList<Employee>();
Map<String, ArrayList<Employee>> empMap = new HashMap<>();
Employee e1 = new Employee("Raju", 10000);
Employee e2 = new Employee("Naresh", 2000);
Employee e3 = new Employee("Sugg", 30000);
Employee e4 = new Employee("Asd", 30000);
list.add(e1);
list.add(e2);
list.add(e3);
list.add(e4);
empMap.put("w1", list);
map.put("t1", empMap);
Comparator<Employee> cmp = (i1, i2) -> i1.getSal().compareTo(i2.getSal());
Comparator<Employee> cmp1 = (i1, i2) -> i1.getName().compareTo(i2.getName());
map.values().stream().map(m -> {
return m.values().stream().map(l -> {
l.sort(cmp.thenComparing(cmp1));
return l;
});
}).flatMap(m -> m).forEach(l -> {
l.forEach(l1 -> System.out.println(l1.getName() + " " + l1.getSal()));
});
Map 是主 object,empMap 是 map 里面的主 Z1D78DC8ED51214E518B5114E518B5114FE2449 员工名单。 我尝试了上面的排序,但是上面的代码还有其他方法可以优化吗?
您已经创建了两个Comparator
函数 - 这是一种很好的方法和实践,此外您可以更改代码的最后一部分 - 它看起来有点混乱:
map.values().stream()
.flatMap(m -> m.values().stream())
.forEach(l -> l.sort(cmp.thenComparing(cmp1)));
或者
map.forEach((key,value)->
value.values()
.forEach(v -> v.sort(cmp.thenComparing(cmp1))));
如果您想要一个完整的流解决方案,您可以按如下方式进行。 这只是将 entrySets in
的每个外部out
和内部流出,并根据指定的要求对列表进行排序。 我添加了一个具有不同薪水的重复名称以进行完整的演示。
Map<String, Map<String, List<Employee>>> results = map
.entrySet().stream()
.collect(Collectors.toMap(out -> out.getKey(),
out -> out.getValue().entrySet().stream()
.collect(Collectors.toMap(
in -> in.getKey(),
in -> in.getValue().stream()
.sorted(Comparator
.comparing(
Employee::getName)
.thenComparing(
Employee::getSalary))
.collect(Collectors
.toList())))));
results.entrySet().forEach(System.out::println);
印刷
t1={w1=[[Asd, 30000], [Naresh, 2000], [Naresh, 10000], [Raju, 10000], [Sugg,
30000]]}
当然,由于List
本身是可变的,因此更直接地按照其他答案中的描述对列表进行排序,而不是创建新的 map。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.