我们假设我有一个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
答案 0 :(得分:4)
您可以将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());
答案 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());