2017-01-19 2 views
0

Ich habe eine String-Arraylist. Lassen Sie uns sagenReduzieren Sie die Anzahl der bedingten Operatoren

private final List<String> fruits = new ArrayList<String>(); 

Jetzt muss ich für einige Fälle

while ((line = in.readLine()) != null) { 
    if (!(line.equals(fruits.get(0)) || line.contains(fruits.get(1)) || 
     line.contains(fruits.get(2)) || line.contains(fruits.get(3)) || 
     line.contains(fruits.get(4)) || line.contains(fruits.get(5)) || 
     line.contains(fruits.get(6)) || line.equals(fruits.get(7) || line.equals(fruits.get(8)))) { 
      //     "DO SOMETHING" 
    } 
} 

Ich muss mit der Zeichenfolge übereinstimmen genau eine ankommende Linie gegen die Elemente in der Arraylist vergleichen und einfach verwenden, für einige Fälle enthält. Aber letztendlich sollte ich nicht mehr als 3 Bedingungen in meiner if-Klausel haben.

+2

Haben Sie überlegt, eine Schleife zu verwenden? – Kayaman

+0

Erstellen Sie einen regulären Ausdruck. –

+0

Schreiben Sie eine Methode mit if-Anweisungen, aber keine bedingten Operatoren. –

Antwort

0

da Sie entweder equals() oder enthält verwenden möchten() auf jeder Frucht in der Liste und Ihre Früchte wachsen immer, erwägen Sie, Ihre Liste in eine Karte zu verwandeln, in der Sie die gewünschte Methode nach Früchten speichern.

private enum Method { 
    CONTAINS, 
    EQUALS; 
} 

@Test 
public void testFruits() throws IOException { 
    Map<String, Method> methodByFruit = new HashMap<>(); 
    methodByFruit.put("apple", Method.CONTAINS); 
    methodByFruit.put("pear", Method.CONTAINS); 
    methodByFruit.put("grenade apple", Method.CONTAINS); 
    methodByFruit.put("banana", Method.EQUALS); 
    methodByFruit.put("kiwi", Method.EQUALS); 

    BufferedReader in = new BufferedReader(new StringReader("kiwi2")); 

    String line; 
    while ((line = in.readLine()) != null) { 
     boolean success = false; 
     for (Entry<String, Method> entry : methodByFruit.entrySet()) { 
      String fruit = entry.getKey(); 
      Method method = entry.getValue(); 
      if (method == Method.EQUALS) { 
       success = line.equals(fruit); 
      } else { 
       success = line.contains(fruit); 
      } 
      if (success) { 
       break; 
      } 
     } 
     if (!success) { 
      System.out.println("DO SOMETHING"); 
     } 
    } 
} 
1

Ihre Anforderung ist nicht klar. Ob die Gleichheitsprüfung speziell für den Index 7 oder 8 nur oder was ist. Aber wie auch immer, hier ist mein Vorschlag. Sie können eine einfache Methode machen überprüfen, ob line Teilmenge aus dem

public boolean isFound(List<String> f, String l){ 
    for(int i=0;i<f.size();i++){ 
     if(l.contains(f.get(i)){ 
      return true; 
     } 
    } 
    return false; 
} 

list enthält Dann können Sie es wie folgt kontrollieren:

if(isFound(fruits, line) || fruits.contains(line)){ 
    //Do Something 
} 
+0

equals wird nur für den Index 0,7,8 verwendet – prithivraj

Verwandte Themen