Java按双值排序哈希图不起作用

时间:2018-09-19 12:19:46

标签: java sorting hashmap

我正在尝试对包含一个对象和一个double值的hashmap进行排序,但是它没有按预期方式工作。这是我的代码。

HashMap<Route, Double> unsortedRoutes = new HashMap<>();

unsortedRoutes.add(new Route("Route Z"),9.49307305463114167);
unsortedRoutes.add(new Route("Route A"),9.546311415463114167);
unsortedRoutes.add(new Route("Route K"),9.37307305463114167);
unsortedRoutes.add(new Route("Route Y"),9.89730305463114167);
unsortedRoutes.add(new Route("Route Z"),3.49307305463114167);
unsortedRoutes.add(new Route("Route A"),3.41870305463114167);
unsortedRoutes.add(new Route("Route K"),4.49307305463114167);
unsortedRoutes.add(new Route("Route Y"),5.34307305463114167);

HashMap<Route, Double> sortedRoutes = new HashMap<>();
        unsortedRoutes.entrySet()
                .stream()
                .sorted(comparingByValue())
                .forEachOrdered(x -> sortedRoutes.put(x.getKey(), x.getValue()));

运行代码时,这些就是我得到的结果

Name: Route D Distance = 3.4187030546311417
Name: Route J Distance = 5.343073054631142
Name: Route A Distance = 9.546311415463114
Name: Route Y Distance = 9.897303054631141
Name: Route U Distance = 4.493073054631141
Name: Route K Distance = 9.373073054631142
Name: Route Z Distance = 9.493073054631141
Name: Route Q Distance = 3.4930730546311417

我希望结果按升序列出。

1 个答案:

答案 0 :(得分:2)

HashMap不能保证其中存储的元素的顺序,因此,即使您以排序方式调用put,生成的HashMap也不会具有固有顺序。如果要保留调用put的顺序,则应使用LinkedHashMap

Map<Route, Double> sortedRoutes = new LinkedHashMap<>();