从java中的地图中重新获取有序列表

时间:2016-06-28 07:42:48

标签: java collections java-stream

我们假设我有一个let myFileURL = NSBundle.mainBundle().URLForResource("listacomuni", withExtension: "txt")! let myText = try! String(contentsOfURL: myFileURL, encoding: NSISOLatin1StringEncoding) print(String(myText)) ,其中HasMap<String, Student>有方法Student,是否有一种聪明的方法可以从double getAverage()检索List<String>个密钥通过降低平均值排序? 我正在考虑使用流来实现紧凑性,但这不起作用:

Map

3 个答案:

答案 0 :(得分:4)

您可以将Comparator.comparingDoubleComparator.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());

答案 1 :(得分:2)

如果您的.getAverage()方法确实返回double,则没有.compareTo()方法。

请改用:

.sorted((e1, e2) -> Double.compare(e2.getValue().getAverage(), e1.getValue().getAverage()))

答案 2 :(得分:1)

如果getAverage()返回基元(double),则无法使用compareTo。使用Double.compare

List<String> ordered  = studentMap.entrySet().stream()
                .sorted((e1, e2) -> Double.compare(e2.getValue().getAverage(),e1.getValue().getAverage()))
                .map(Map.Entry::getKey)
                .collect(Collectors.toList());