Java分组总是在改变顺序

new*_*mer 1 java grouping list java-stream collectors

我有简单对象的列表:

private String unit;
private Double value;
Run Code Online (Sandbox Code Playgroud)

列表看起来像这样:

f, 1.0;
ml, 15.0;
g, 9.0
Run Code Online (Sandbox Code Playgroud)

我创建了一个简单的函数,希望将这些值分组并以unit为键将它们放入地图,并将对象列表作为值,但是我想像在原始列表中那样保存顺序。这是我目前的解决方案:

myList.stream()
    .collect(groupingBy(MyObject::getUnit));
Run Code Online (Sandbox Code Playgroud)

但是之后,我的地图按字母顺序排序:f,g,ml,而不是f,ml,g。有没有其他分组方法可以解决?

And*_*ner 10

问题是groupingBy将事物放到某些地图中,可能是HashMap,没有确定的顺序。

使用带有的groupingBy重载Supplier<M> mapFactory来获得具有订购保证的地图,例如

myList.stream()
    .collect(groupingBy(MyObject::getUnit,
                        LinkedHashMap::new,
                        Collectors.toList()));
Run Code Online (Sandbox Code Playgroud)