2015-10-13 71 views
1

我熟悉這樣在三元條件操作多個條件:多個條件操作

(condition A ? value A : 
    (condition B ? value B : 
    (condition C ? value C : 
     ... 
    ) 
) 
) 

,但我不明白下面的作品的代碼(函數如何想返回一個整數:

return (co1.Nr() < co2.Nr() ? -1 : 
     (co1.Nr() == co2.Nr() ? (co1.Id() < co2.Id() ? -1 : 
      (co1.Id() == co2.Id() ? 0 : 1)) : 1; 

請你解釋一下嗎?

+1

這些類型的表達式是如此難以閱讀。幸運的是,在Java 8中,您可以編寫Comparator.comparingInt(MyType :: Nr).thenComparingInt(MyType :: Id);' –

+0

您對此有何瞭解? –

回答

3

打破它並理解。例如:考慮第一部分。

return (co1.Nr() < co2.Nr() ? -1 : (all_other_codes); 

如果條件co1.Nr() < co2.Nr()真rerutn -1否則執行all_other_codesall_other_codes返回integer

現在看all_other_codes

(co1.Nr() == co2.Nr() ? (co1.Id() < co2.Id() ? -1 : 
      (co1.Id() == co2.Id() ? 0 : 1)) : 1; 

如果co1.Nr() == co2.Nr()真正的回報

(co1.Id() < co2.Id() ? -1 : 
       (co1.Id() == co2.Id() ? 0 : 1)) 

否則返回值1

2

這是一個主要和次要的排序:按Nr排序,如果它們相等,按ID排序返回-1,0和1是比較的標準te sts用於排序。

+0

@Kienitz謝謝。 –

1
if co1.Nr() < co2.Nr() return -1 
else if co1.Nr() == co2.Nr() then 
    if co1.Id() < co2.Id() return -1 
    else if co1.Id() == co2.Id() return 0 
    else return 1 
else return 1 
1

條件地圖以下

if(co1.Nr() < co2.Nr()) 
    return -1; 
else if(co1.Nr() == co2.Nr()) 
    if(co1.Id() < co2.Id()) 
     return -1; 
    else if(co1.Id() == co2.Id()) 
     return 0; 
    else 
     return 1; 
else 
    return 1; 
0

基本上,這是如果的語句代碼做什麼

if (co1.Nr()< co2.Nr()){ 
     return -1; 
    }else if (co1.Nr()==co2.Nr()){ 
     if (co1.Id() <co2.Id()){ 
      return -1; 
     }else if(co1.Id() == co2.Id()){ 
      return 0; 

     }else{ 
      return 1; 
     } 
    }else 
    { 
     return 1; 
    }