获取Set中的唯一元素

时间:2016-12-07 18:01:13

标签: java iterator set

如果只有一个条目,我需要知道在Set中保持值的“最佳”和最安全的方法。 methodToGetValues()被广泛用于读取配置文件并返回给定特定键的值列表,在本例中为"enabled"。对于enabled键,Set中只返回一个条目,显然是"true""false",但是会发生错误。我有以下看起来有点复杂:

Set<String> enabled = methodToGetValues("enabled");

if (!enabled.isEmpty() && enabled.size() < 2 && "true".equals(enabled.iterator().next())) {
    ...
}

有人可以建议一种更简单但仍然健壮的检查方法吗?

3 个答案:

答案 0 :(得分:0)

不确定使用|STATE | NUMBER OF STORES | NUMBER OF TRANSACTIONS | |-------|------------------|--------------------------| | ca | 25 | 500 | |-------|------------------|--------------------------| | il | 2 | 25 | |-------|------------------|--------------------------| 来驱动这个数据的用例是什么,但这里有一个选项:

Set<String>

答案 1 :(得分:0)

public Set<String> getValues(final String key){
    .....
}

public String getValue(final String key) {
    final Set<String> values = getValues(key);
    if (values == null || values.size() != 1) {
        throw new IllegalStateException("Invalid configuration for give key :" + key);
    }

    return values.iterator().next();
}

public Boolean getValueAsBoolean(final String key) {
    return Boolean.valueOf(getValue(key));
}

您可以修改方法以使accept参数在未找到键时返回默认值。您可以添加不同的方法来返回特定类型对象,如inte,boolean,这样代码看起来更干净

答案 2 :(得分:0)

你的问题要求从Set中获取一些东西。但你的例子只需要检查。

如果您知道在Set中会发生什么,这可以正常工作。

    if (enabled != null && enabled.size() == 1 && enabled.contains("true")) {
        ...
    }

否则,如果你只想获得元素但不知道它是什么,你建议的迭代器工作正常。

    String getOnlyElement(Set<String> enabled, String default) {
        return (enabled == null || enabled.size() != 1) ? default : enabled.iterator().next();
    }

我喜欢使用空检查,但这取决于methodToGetValues返回的内容。