【问题标题】:Java HashMap sorting using custom lambda comparator使用自定义 lambda 比较器进行 Java HashMap 排序
【发布时间】:2016-11-08 20:38:04
【问题描述】:

所以我有一个LinkedHashMap,它的键是Float[] 数组,值是LinkedList<LinkedList>(嵌套列表)。对于每个键,我尝试按数字顺序对值进行排序,这是通过比较嵌套列表中的浮点值获得的。详情:

// copy of an original hashmap 
LinkedHashMap<Float[], LinkedList<LinkedList>> tempMap = new LinkedHashMap<>(attrMap);

然后是比较器:

// i is index of numeric (float) value I want to sort with
Comparator<LinkedList> comp = (a, b)-> ((Float) a.get(i)).compareTo((Float) b.get(i));
tempMap.get(keyObj).sort(comp);

这不会对地图进行排序。我该如何解决?

EDIT2:由于复制实际代码很棘手,这是我在github link 上的源代码。代码 sn-p 位于 Analyzer 类中,位于 biConvert() 方法下。

【问题讨论】:

  • 您能否edit 您的问题并发布简短但完整的示例,我们可以将其复制粘贴到我们的机器并重现您的问题(可能通过创建此类示例,您也会找到问题的原因)。
  • 您的示例无法编译,例如在 l.append(..) 上。请尝试发布不会引入与您的问题无关的错误的代码。
  • 抱歉,链接不能只作为无效代码的源代码,尤其是当您想稍后更正链接代码时,这会使您的问题无效。 Stack Overflow 的目的是为未来的用户提供可搜索的存储库,所以如果您的问题不包含足够的信息来重现您的问题本身,那么我担心它在这里是题外话。
  • 另外,如果您希望别人花一些时间来帮助您,那么您应该花费类似的时间和精力(或更多)来尽可能简单地帮助您。

标签: java sorting lambda hashmap comparator


【解决方案1】:

将排序结果分配给同一张地图

【讨论】:

  • 据我记得list.sort(comparator) 不会返回新列表,而是重新排列我们调用该方法的列表,因此在使用该列表的任何地方都应该可以看到更改(包括已经保存的地图该列表)。
  • 对不起,你能解释一下你想要排序什么吗?浮点数还是列表?
  • 我不是这个问题的作者(所以如果你想让作者知道它,你可能需要在问题下发表评论而不是你的答案),但是从我看到的 OP(原文海报)想要对包含其他列表(可能包含浮点数)的列表进行排序。我看到这样的列表,例如表,其中第一个列表包含行,列的第二个值和 OP 希望根据所选列对行进行排序。
  • 谢谢@Pshemo,我已经按照你说的编辑了这个问题。您描述的内容是正确的,因为代码是对给定的 csv 表(虹膜数据集作为样本数据)进行排序和分析。它变得很混乱,因为我需要在地图中混合数据(int-floats-string 列表的嵌套列表)并且对嵌套列表进行排序比我想象的更烦人.. 如果有人能指出错误,将非常感激!
猜你喜欢
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 2022-01-05
  • 2020-10-24
  • 1970-01-01
相关资源
最近更新 更多