Вам необходимо прочитать весь контекст. У вас есть 5 операторов if в вашем коде. Я немного упросту это:
1) D == M && M == T
2) D != M && D != T && M != T
3) D == M && M != T
4) M == T && D != T
5) D == T && D != M
Давайте проанализируем код.
Первый выпуск
Он сообщает, что M != T
всегда оценивается в true
в 3-й строке:
3) D == M && M != T
Почему? Потому что ваша 1-я строка:
1) D == M && M == T
Она гарантирует, что в 3-й строке возможны только следующие значения:
D == M && M != T
D != M && M != T
D != M && M == T
Вы можете понимать это как:
- если
D == M
, то M
должно быть! = T
(нет смысла проверять M != T
) - , если
D != M
, тогда M
может быть = или! = T
( мы должны проверить, если M
= или! = T
)
Новый код:
1) D == M && M == T
2) D != M && D != T && M != T
3) D == M
4) M == T && D != T
5) D == T && D != M
Второй выпуск
Та же ситуация как в первом выпуске. D != T
всегда оценивается как true
в 4-й строке:
4) M == T && D != T
, потому что 3-я строка:
3) D == M
гарантирует, что D != M
. 2-я строка:
2) D != M && D != T && M != T
гарантирует, что:
D == T && M != T
D != T && M == T
D == T && M == T
Мы удалим 3-й вариант, потому что 1-я строка его перехватывает:
1) D == M && M == T
Теперь у нас есть :
D == T && M != T
D != T && M == T
Вы можете понимать это как:
- если
D == M
, то M
должно быть! = T
(проверять M != T
) * не имеет смысла - если
D != M
, то M
должно быть = T
(проверять нет смысла M == T
)
Новый код:
1) D == M && M == T
2) D != M && D != T && M != T
3) D == M
4) M == T
5) D == T && D != M
Третий и четвертый выпуски
Целое условие if всегда оценивается в true
. Давайте прочитаем 5-ю строку:
5) D == T && D != M
M != D
всегда верно, потому что 3-я строка гарантирует это:
3) D == M
Новый код:
1) D == M && M == T
2) D != M && D != T && M != T
3) D == M
4) M == T
5) D == T
Мы также можем удалить D == T
, потому что:
3) D == M
4) M == T
На 5-й строке возможна только следующая опция: D != M && M != T
. 2-я строка:
2) D != M && D != T && M != T
Если D != T
, то 2-я строка ловит его. Это означает, что единственная возможность - D == T
, поэтому нет смысла проверять ее.
Окончательный код
final Set<String> desktopMediaCodes = getCodesByMediaDeviceType(mediaModels, MediaDeviceType.DESKTOP);
final Set<String> mobileMediaCodes = getCodesByMediaDeviceType(mediaModels, MediaDeviceType.MOBILE);
final Set<String> tabletMediaCodes = getCodesByMediaDeviceType(mediaModels, MediaDeviceType.TABLET);
// In case they are the same, only default.
if (desktopMediaCodes.equals(mobileMediaCodes) && mobileMediaCodes.equals(tabletMediaCodes)) {
asset.setDefaults(desktopMediaCodes);
return;
}
// In case three are different, we will send mobile, desktop and tablet.
if (!desktopMediaCodes.equals(mobileMediaCodes) && !desktopMediaCodes.equals(tabletMediaCodes) && !mobileMediaCodes.equals(tabletMediaCodes)) {
asset.setDesktop(desktopMediaCodes);
asset.setMobile(mobileMediaCodes);
asset.setTablet(tabletMediaCodes);
return;
}
// In case only tablet is different, we will send default and tablet.
if (desktopMediaCodes.equals(mobileMediaCodes)) {
asset.setDefaults(desktopMediaCodes);
asset.setTablet(tabletMediaCodes);
return;
}
// In case only desktop is different, we will send default and tablet.
if (mobileMediaCodes.equals(tabletMediaCodes)) {
asset.setDefaults(mobileMediaCodes);
asset.setDesktop(desktopMediaCodes);
return;
}
// In case only mobile is different, we will send default and tablet.
asset.setDefaults(tabletMediaCodes);
asset.setMobile(mobileMediaCodes);