【发布时间】:2023-03-17 04:20:02
【问题描述】:
我有可能有重复条目的字符串数组列表。我想从这些值中获取唯一列表。
我有一个字符串数组列表,每个数组都有两个字符串值。
示例字符串数组值:
{"error message 1", "fail"}
{"error message 2", "N/A"}
{"error message 1", "fail"} // duplicate
{"error message 2", "fail"}
我分别从 JSON 元素中获取 "error message 1" 和 "fail" 字符串,并将它们添加到 String 数组对象。现在我想要这个数组的独特组合。所以,如果我有上述 4 个数组,我希望只有三个唯一条目的列表。
从互联网搜索中,我深入研究以将 HashSet 用于我的用例(顺序无关紧要)。但是,HashSet 会将所有 4 个条目添加到集合中。我什至尝试使用 'contains' 来检查对象是否已经存在,但这也不起作用。我相信,这是因为 contains 方法是比较 'reference' 而不是 'value'。这是 HashSet 添加重复值的原因吗?
我将这些字符串数组添加到 HashSet 的代码是
Set<String[]> uniqueSet = new HashSet<String[]>();
if(!uniqueSet.contains(new String[] {errorMessage,result})) // I get errorMessage and result as separate Strings
uniqueSet.add(new String[] {errorMessage,result}); // I expect to have only 3 values here in the uniqueSet. But it adds all 4.
从 SO 相关问题的答案中,我了解到,如果需要,必须覆盖 hashcode 和 equal 方法。但是,如果那是我所缺少的,我不确定在我的情况下我该怎么做?
另外,如果您有任何其他建议可以更好地唯一存储字符串数组,请告诉我。
问候,
鲁米特
【问题讨论】:
-
必须是 String[] 吗? ,能不能把String[]转换成POJO,然后实现.equals.?
-
我会使用接受 String[] 的 openCSV 库将这些唯一条目写入 CSV 文件。
标签: java arrays string collections