2016-12-07 157 views
0

如果只有一个条目,那么我需要知道“集合”中保留值的“最佳”和最安全的方法。 methodToGetValues()被广泛用于读取配置文件并返回给定特定键值的列表,在这种情况下为"enabled"。对于enabled密钥,只能在Set中返回一个条目,明显是"true""false",但会发生错误。我有以下几点似乎有点复杂:获取集合中的唯一元素

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

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

任何人都可以提出一个更简单但仍然强大的方式来检查这个吗?

+0

为什么你只有一个元素的集合?我只是想知道,因为我觉得这可能是一个XY问题。 –

+1

对于其他键,读取配置文件时返回的值是多个,所以Set将具有更多元素。 – MeanwhileInHell

+0

为什么不为这种类型的值写一个新的methodToGetValue? –

回答

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返回的内容。

0

不确定的使用情况下,将驱动器使用该数据的Set<String>什么,但这里是一个选项:

// check size = 1 over two checks, use contains rather than grabbing an iterator 
if (set.size() == 1 && set.contains("true")) { 
    ...  
} 
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)); 
} 

您可以修改方法有接受argument,以便返回时的键的默认值没有找到。您可以添加不同的方法来返回特定的类型对象,如inte,boolean,这样代码看起来更清洁