2015-10-13 2 views
1

Я знаком с несколькими условиями в тройном условном операторе, как это:Multiple условного оператор

(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_codes. Где, как all_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; 
    } 
Смежные вопросы