gpt4 book ai didi

java - 存储字符串数组唯一列表的最佳方式

转载 作者:行者123 更新时间:2023-11-29 10:13:45 25 4
gpt4 key购买 nike

我有可能有重复条目的字符串数组列表。我想从这些值中获取唯一列表。

我有一个字符串数组列表,每个数组都有两个字符串值。

示例字符串数组值:

{"error message 1", "fail"}
{"error message 2", "N/A"}
{"error message 1", "fail"} // duplicate
{"error message 2", "fail"}

我分别从 JSON 元素中获取 “错误消息 1”“失败” 字符串,并将它们添加到一个字符串数组对象中。现在我想要这个数组的独特组合。所以,如果我有上面的 4 个数组,我想得到只有三个唯一条目的列表。

从 Internet 搜索中,我深入了解如何将 HashSet 用于我的用例(顺序无关紧要)。但是,HashSet 将所有 4 个条目添加到集合中。我什至尝试使用“包含”来检查对象是否已经存在,但这也不起作用。我相信,这是因为 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 上相关问题的答案中,我了解到如果需要,必须覆盖 hashcodeequal 方法。但是,如果那是我所缺少的,我不确定在我的情况下我该怎么做?

此外,如果您有任何其他建议可以更好地唯一存储字符串数组,请告诉我。

问候,

鲁米特

最佳答案

您可以使用 List 而不是数组。如果您使用 java.util 包中的列表,它们应该已经以适合的方式实现了 hashCode()equals(Object)您的需求(深度等于和深度 hasCode):

String[][] stringArrays = new String[][] {
{"error message 1", "fail"},
{"error message 2", "N/A"},
{"error message 1", "fail"}, // duplicate
{"error message 2", "fail"}
};

Set<List<String>> uniqueSet = new HashSet<List<String>>();
for (String[] a : stringLists) {
uniqueSet.add(Arrays.asList(a));
}
// uniqueSet.size() should return 3 here

关于java - 存储字符串数组唯一列表的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24520445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com