Java分组总是在改变顺序

我有一个带有简单对象的列表:

private String unit;
private Double value;

列表如下所示:

f,1.0;
ml,15.0;
g,9.0

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

myList.stream()
    .collect(groupingBy(myobject::getUnit));

但是在那之后,我的地图按字母顺序排序: f,g,ml代替f,ml,g。 分组修复是否有其他选择?

eer05067 回答:Java分组总是在改变顺序

问题在于groupingBy将事物放到某些地图中,可能是HashMap,它没有保证的顺序。

使用需要Supplier<M> mapFactory的{​​{3}}来获得具有订购保证的地图,例如

myList.stream()
    .collect(groupingBy(MyObject::getUnit,LinkedHashMap::new,Collectors.toList()));
,

groupingBy()的Javadoc说:

  

对于返回的Map或List对象的类型,可变性,可序列化性或线程安全性,没有保证。

然后,Map界面本身不对键的顺序提供任何保证!

因此:您要么必须使用另一个 grouping 方法(允许您强制使用LinkedHashMapTreeMap),要么退后一步,然后重新考虑一下整个方法。例如,您可以对列表进行排序

本文链接:https://www.f2er.com/3102264.html

大家都在问