从地图基础上提取关键字的优先级值?

时间:2016-12-21 02:51:35

标签: java hashmap guava lookup

我有一个String和String的映射。我想提取键值并将其分配给另一个String变量,但是按优先级顺序。

  • 如果存在abc密钥,则将abc的值分配给clientId变量,我们就完成了。
  • 如果abc密钥不存在,则为Buf,然后查找此密钥pqr并将pqr的值分配给clientId变量,我们就完成了。
  • 但如果pqr密钥也不存在,那么请查找此密钥def并将def的值分配给clientId变量,我们就完成了。
  • 但如果这些键都不存在,那么clientId的值将为空。

以下是代码:

Map<String, String> holderMap = populateHolderMap<>();
String clientId = null;

if (!holderMap.isEmpty()) {
  clientId = holderMap.get("abc");
  if (Strings.isNullOrEmpty(clientId)) {
    clientId = holderMap.get("pqr");
    if (Strings.isNullOrEmpty(clientId)) {
      clientId = holderMap.get("def");
    }
  }
}

有没有更好的方法来写这个东西?或者可能是使用三元运算符的一个班轮?

有可能存在所有三个键或者可以存在两个键,我总是必须坚持我的订单。如果存在abc密钥,那么无论是否存在其他密钥,我们都将使用该密钥。

1 个答案:

答案 0 :(得分:0)

请在较小的代码行上寻找代码可读性。你有什么好。

使用三元运算符: 语法是条件? if_condition_true:if_condition_false;

if (!holderMap.isEmpty()) {
  clientId = holderMap.get("abc") == null ? 
             holderMap.get("pqr") == null ? 
             holderMap.get("def") == null ? 
             null : holderMap.get("def") : holderMap.get("pqr") : holderMap.get("abc");
}

使用if和else if

if (!holderMap.isEmpty()) {
    if( holderMap.get("abc") != null ) {
       clientId = holderMap.get("abc");
    } else if ( holderMap.get("pqr") != null ) {
       clientId = holderMap.get("pqr");
    } else if (holderMap.get("def") != null ) {
       clientId = holderMap.get("def");
    }
}