1

我当前的项目要求我将成对的字符串用于各种用例。我目前正在使用 Apache Lang3 Pair 元组来处理这种情况。当前的实现如下所示

private List<Pair<String, String>> configParameters;
private List<Pair<String, String>> sensorReadingMeasures;

在与团队其他成员讨论后,我们决定因为我们需要公开这些字符串对,所以最好找到原生 Java 解决方案。

我试图在 java util 库中使用 AbstractMap 找到一个解决方案,但我没有太多运气能够实例化它,而且谷歌搜索没有提供太多帮助我的信息。

我试图通过这样做重新创建上述内容,

AbstractMap<String, String> pair = new AbstractMap<String, String>();

我将能够使用 keyset() 函数提取所需的信息,并通过 get() 函数为每个键值提取所需的信息。

除了我的实例化问题之外,这似乎是获得相同功能的一种非常低效的方法,我很好奇是否有更好的选择。如果没有人请提供一个关于如何适当地实例化 AbstractMap 的示例。

4

2 回答 2

2

如果每对中的两个字符串之一是唯一的,正如您使用 an 的AbstractMap建议所暗示的那样,您可能希望公开一个返回 的 API Map<String,String>,并为该接口使用您选择的实现(例如,LinkedHashMap<String,String>)。

您班级的用户将能够通过 usingString从 中提取 s对,而不是为每个键调用 a :MapMap.Entry<String,String>get

Map<String,String> getAllPairs() {
    ...
}
...
for (Map.Entry<String,String> pair : myClass.getAllPairs()) {
    // You can use pair.getKey() and pair.getValue() here
}
于 2013-07-30T16:30:56.873 回答
0

你能不能只使用 POJO:

public class Tuple {
    public String oneString;
    public String otherString;
}

您可以拥有它们的列表:

public List<Tuple> tuples = new ArrayList<Tuple>();

或者Collection,如果您:

@Override
public boolean equals(Object obj) {
        // Code to handle non-Tuples and null goes here
        // Code to handle null oneString values goes here (if you allow that)
        return ((Tuple)that).oneString.equals(oneString);
}

@Override
public int hashCode() {
        // handle null oneString values here
    return oneString.hashCode();
}
于 2013-07-30T16:31:21.270 回答