为了账号安全,请及时绑定邮箱和手机立即绑定

如何对 MultiValuedMap 中包含的双精度 ArrayList 进行排序

如何对 MultiValuedMap 中包含的双精度 ArrayList 进行排序

叮当猫咪 2023-04-13 16:55:41
我有一个 MultiValuedMap(Apache commons),其中包含字符串键和存储在双精度数组列表中的值,从文件中读取。我不需要对键进行排序,但我确实需要对与每个键关联的 ArrayList 进行排序。有没有办法做到这一点?我试过 Collections.sort 但它似乎不适用于 MultiValuedMap。我还没有尝试创建比较器,但我不确定如何为地图中的某些内容开始一个比较器。//Read file of data to be placed in MultiValuedMap BufferedReader br = new BufferedReader(new FileReader(fileName));String line = "";String csvSplitBy = ",";//Create the MultiValuedMap    MultiValuedMap<String, Double> mvMap = new ArrayListValuedHashMap<>();//Read data into MultiValuedMapwhile ((line = br.readLine()) != null) {       String[] cols = line.split(csvSplitBy);       mvMap.put(cols[4], Double.parseDouble(cols[3]));  //This gives an errorCollections.sort(mvMap);我从 Collections.sort 得到的错误是“没有合适的排序方法(MultiValuedMap)”我不想对键进行排序,只是对值进行排序。所以预期的输出应该是这样的:44 => [284.5, 289.35, 300.53, 534.0] 和 41 => [311.82, 368.45, 400.2]
查看完整描述

3 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

根据 java docs MultiValuedMapimplementsMap的 get。所以编译器假设我们从中获得的值类型MultiValuedMap.get() 是Double

我会Collections.sort(mvMap);用类似的方法做一个解决方法

for (String key : mvMap.keySet()) 
    mvMap.put(key, Collections.sort((List<Double>)mvMap.get(key));
}


查看完整回答
反对 回复 2023-04-13
?
RISEBY

TA贡献1856条经验 获得超5个赞

Collections.sort需要一个可以排序的 Collection。您正在向它传递一个无法排序的 MultiValuedMap。相反,您需要做的是调用Collections.sort每个单独的 ArrayList。

像这样的东西应该可以工作(我还没有看到实际的库,但这是遵循地图约定)

for(String s: mvMap.keySet()){
    Collections.sort(mvMap.get(s));
}

遍历每个字符串并使用给定的列表对其进行排序



查看完整回答
反对 回复 2023-04-13
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

到目前为止,我已经尝试了所有的建议(谢谢!),但都收到了某种类型的不兼容错误。


我唯一能做的就是创建一个解决方法并创建一个新的常规 HashMap 并将 ArrayList 从 mvMap 拉入 ArrayList,对其进行排序,然后将其放入新的 HashMap。这不是超级有效,但这是我能够想出的,并且有效。不过,如果您有任何其他建议,请告诉我,我会继续尝试。感谢您的帮助!


这是我添加的内容:


//Declared with the other variables

HashMap<String, List<Double>> sortedMap = new HashMap<String, List<Double>>();


//Added after the while loop

for (String key : mvMap.keySet()) {

    List<Double> list = new ArrayList<Double>(mvMap.get(key));

    Collections.sort(list);

    sortedMap.put(key, list);

}


查看完整回答
反对 回复 2023-04-13
  • 3 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信