Liste in Java?

Kenta1561

Bekanntes Mitglied
Hallo,

ich habe mal wieder eine Frage und möchte sie euch stellen. Man kann ja bekanntlicherweise mit If-Statements/Switch-Statements entscheiden was passieren soll wenn eine bestimmte Bedingung erfüllt wird, z.B. dass wenn "int zahl" 1 beträgt, dass "Hallo" ausgegeben wird und wenn "int zahl" 2 beträgt, dass "Tschüss" ausgegeben wird. Bis zehn Bedingungen kann man ja noch gut weitermachen, aber was kann ich machen, wenn ich 1000 verschiedene Bedingungen habe und ich nicht 1000 Switch/If-Statements schreiben möchte? Gibt es da eine Möglichkeit sozusagen eine Liste in Java zu machen um die Bedingung und das was ausgeführt werden soll dort einzutragen? Wenn ja, würde ich mich sehr freuen wenn ihr mir mit Codebeispielen helfen könntet.

MfG
Kenta1561
 
1000 verschiedene Bedingungen? dann ist was falsch in der Überlegung. Statt if könntest du switch case anwenden, ändert aber nichts an den 1000 statements.

Was auch möglich wäre, wäre eine Map<Integer, Runnable>

Java:
Map<Integer,Runnable> commands =new HashMap<>();

        // Populate commands map
        commands.put(1,()->System.out.println("Hi"));
        commands.put(2,()->System.out.println("Bye"));

        // Invoke some command
        int num= 1;
        commands.get(num).run();   // Prints "Hi"

das ist aber dann nicht mehr wirklich Anfängerthema
 
Das ist ein Lambda ausdruck du könntest auch schreiben (Mit einer Anonymen Klasse):
Code:
new Runnable() {
    @Override
    public void run() {
        System.out.println("Hi");
    }
}
die () stehen für run ohne parameter. Deshalb hab ich auch gesagt, kein Anfängercode 😉
 
Also so es nur um unterschiedliche Ausgaben geht, wäre es sinnvoll, lediglich die Strings in einem Array zu verstauen.
Also sowas in der Art:
Code:
  String[] texte = { "Hallo", "Tschüss", "Wie geht es Dir?" };
  
  index = 2;
  System.out.println(texte[index]);

Das ganze lässt sich auch dynamisch handhaben, also ggf. statt einem Array eine ArrayList.

Ansonsten ist die Lösung mit der HashMap mit Runnable durchaus gut. Hier ist halt wichtig, dass man den Code nicht nur so kompakt schreiben kann sondern man kann da ganze Klassen incl. deren Initialisierung hinterlegen:
Code:
public class TextPrinter implements Runnable {
  private String text;
  public TextPrinter(String text) { this.text = text; }
  public void run() { System.out.println(text); }
}

// Hier ist alles wie das Beispiel von thecain! Nur das Füllen ist jetzt etwas anders
commands.put(1, new TextPrinter("Hi"));
commands.put(2, new TextPrinter("Bye"));

Dieses Beispiel ist natürlich noch nicht komplizierter, aber wie leicht das Sinn machen kann, erkennt man wenn man dich die ganzen Möglichkeiten vorstellt. Die Klasse mag ja noch ganz andere Dinge machen wie: Erst einmal aus einer Datenbank Möglichkeiten für eine Begrüßung heraus suchen um diese dann über einen Translator zu schicken, damit diese in der Sprache des Nutzers ausgegeben werden kann (Nur um mal etwas herum zu spinnen und etwas komplexes zu erfinden, das dann tatsächlich ein Objektorientiertes Design erfordert).

Oder um es anders auszudrücken: Dieses "richtige Klassen" schreiben ist der eigentliche Weg. Wenn man dies aber nicht möchte, dann kann man dies "abkürzen" und anonyme Klassen schreiben (new Runnable() { void run() { ... } erzeugt eine neue Klasse, die aber keinen Namen von uns bekommen hat, also anonym ist.) Und dies lässt sich dann noch durch Lamda Ausdrücke weiter verkürzen.

Das ist mir wichtig zu erwähnen, damit das Verständnis dahinter besser wird und man nicht immer größere Komplexität in verkürzten Schreibweisen versucht unter zu bringen.
 

Zurück
Oben