[英]Simplify or reduce if statement
我想通過用開關或 function 替換它們來減少 If 的數量,這可能嗎? 由於我的代碼太長,我認為 function 可以比重復的 if 或 else 做得更好,而且它也更容易理解。
double a = text.charAt(39), b= text.charAt(40), c= text.charAt(41), d= text.charAt(42) ;
Collection<Double> list=new ArrayList<Double>();
list.add(a);
list.add(b);
list.add(c);
list.add(d);
if ( a>=15||b>=15||c>=15||d>=15) {
if ( Collections.max(list) == a) {
Defauts_detecteur.setText("Défauts récurrents constatés sur le détecteur 1");
}
else if ( Collections.max(list) == b)
{
Defauts_detecteur.setText("Défauts récurrents constatés sur le détecteur 2");
}
else if ( Collections.max(list) == c )
{
Defauts_detecteur.setText("Défauts récurrents constatés sur le détecteur 3");
}
else
{
Defauts_detecteur.setText("Défauts récurrents constatés sur le détecteur 4");
}
Conseil_detecteur.setText("--> Par mesure de sécurité, nous vous conseillons vivement de vérifier que le détecteur est bien collé au produit à sécuriser.\nPour une adhésion optimale, remplacez l’adhésif.\nVérifiez que le détecteur est bien connecté à la centrale et qu’il est en bon état.");
}
else {
Conseil_detecteur.setText("--> Des alarmes régulières ? Envie d'en savoir plus ?\nContactez notre hotliner au 02 37 33 69 66 qui vous guidera dans leurs résolutions.");
Defauts_detecteur.setVisibility(View.GONE);
}
您始終可以使用循環(或 stream,具體取決於性能要求):
final double a = text.charAt(39), b = text.charAt(40), c = text.charAt(41), d = text.charAt(42) ;
final List<Double> list = Arrays.asList(a, b, c, d); // note that an array (double[]) instead of a collection would avoid boxing
final double maxValue = Collections.max(list);
if (maxValue >= 15) { // at least one value is greater than or equal to 15, no need to inspect each element individually
for (int i = 0; i < list.size(); ++i) {
if (list.get(i) == maxValue) {
Defauts_detecteur.setText("Défauts récurrents constatés sur le détecteur " + (i+1));
break; // stop after first matching value was found
}
}
Conseil_detecteur.setText("--> Par mesure de sécurité, nous vous conseillons vivement de vérifier que le détecteur est bien collé au produit à sécuriser.\nPour une adhésion optimale, remplacez l’adhésif.\nVérifiez que le détecteur est bien connecté à la centrale et qu’il est en bon état.");
} else {
Conseil_detecteur.setText("--> Des alarmes régulières ? Envie d'en savoir plus ?\nContactez notre hotliner au 02 37 33 69 66 qui vous guidera dans leurs résolutions.");
Defauts_detecteur.setVisibility(View.GONE);
}
請注意,如果其中兩個值相同且為最大值(例如 a=16、b=16、c=12、d=9),則當前代碼的行為不明確。 output 是“檢測器 1”,但“檢測器 2”也是最大值。
如果您的列表可以包含多個最大值並且您想找到所有最大值,則需要稍微更改循環(但您現有的代碼只找到“第一個”值的 position)。
final List<Integer> maxPositions = new ArrayList<>();
for (int i = 0; i < list.size(); ++i) {
if (list.get(i) == maxValue) {
maxPositions.add(i+1);
// don't stop, keep going
}
}
// will print e.g. "found at positions [1, 4]
….setText("Max values found at positions " + maxPositions);
功能風格:
HashMap<Character, Integer> values = new HashMap<>();
values.put('a', 239);
values.put('b', 123);
values.put('c', 345);
values.put('d', 555);
Optional<Map.Entry<Character, Integer>> max = values.entrySet().stream().filter(e -> e.getValue() > 15).max(Map.Entry.comparingByValue());
max.ifPresent(characterIntegerEntry -> System.out.println(" max entry value for detector " + characterIntegerEntry.getKey() + " is" + characterIntegerEntry.getValue()));
將使用任意數量的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.