Mar*_*arc 3 java collections java-stream
让我们假设我有一个HasMap<String, Student>,其中Student有一个方法double getAverage(),是否有一种聪明的方法可以List<String>从Map按平均递减顺序排序的键中检索一个键?
我正在考虑使用流来实现紧凑性,但这不起作用:
List<String> ordered = studentMap.entrySet().stream()
.sorted((e1, e2) -> e2.getValue().getAverage().compareTo(e1.getValue().getAverage()))
.map(Map.Entry::getKey)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
为此,您可以使用Comparator.comparingDouble和Comparator.reversed():
List<String> ordered = studentMap.entrySet().stream()
.sorted(Comparator.<Map.Entry<String, Student>>comparingDouble(e -> e.getValue().getAverage()).reversed())
.map(Map.Entry::getKey)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)