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

我有一个 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 MultiValuedMap

while ((line = br.readLine()) != null) {

       String[] cols = line.split(csvSplitBy);

       mvMap.put(cols[4], Double.parseDouble(cols[3]));  


//This gives an error

Collections.sort(mvMap);

我从 Collections.sort 得到的错误是“没有合适的排序方法(MultiValuedMap)”


我不想对键进行排序,只是对值进行排序。所以预期的输出应该是这样的:


44 => [284.5, 289.35, 300.53, 534.0] 和 41 => [311.82, 368.45, 400.2]


叮当猫咪
浏览 107回答 3
3回答

噜噜哒

根据 java docs&nbsp;MultiValuedMapimplementsMap的 get。所以编译器假设我们从中获得的值类型MultiValuedMap.get()&nbsp;是Double我会Collections.sort(mvMap);用类似的方法做一个解决方法for&nbsp;(String&nbsp;key&nbsp;:&nbsp;mvMap.keySet())&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;mvMap.put(key,&nbsp;Collections.sort((List<Double>)mvMap.get(key)); }

RISEBY

Collections.sort需要一个可以排序的 Collection。您正在向它传递一个无法排序的 MultiValuedMap。相反,您需要做的是调用Collections.sort每个单独的 ArrayList。像这样的东西应该可以工作(我还没有看到实际的库,但这是遵循地图约定)for(String&nbsp;s:&nbsp;mvMap.keySet()){ &nbsp;&nbsp;&nbsp;&nbsp;Collections.sort(mvMap.get(s)); }遍历每个字符串并使用给定的列表对其进行排序

缥缈止盈

到目前为止,我已经尝试了所有的建议(谢谢!),但都收到了某种类型的不兼容错误。我唯一能做的就是创建一个解决方法并创建一个新的常规 HashMap 并将 ArrayList 从 mvMap 拉入 ArrayList,对其进行排序,然后将其放入新的 HashMap。这不是超级有效,但这是我能够想出的,并且有效。不过,如果您有任何其他建议,请告诉我,我会继续尝试。感谢您的帮助!这是我添加的内容://Declared with the other variablesHashMap<String, List<Double>> sortedMap = new HashMap<String, List<Double>>();//Added after the while loopfor (String key : mvMap.keySet()) {&nbsp; &nbsp; List<Double> list = new ArrayList<Double>(mvMap.get(key));&nbsp; &nbsp; Collections.sort(list);&nbsp; &nbsp; sortedMap.put(key, list);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java