Tracks
/
Java
Java
/
Übungen
/
Listenoperationen
Listenoperationen

Listenoperationen

Schwer

Anleitung

Implementiere grundlegende Listenoperationen.

In funktionalen Sprachen sind Listenoperationen wie length, map und reduce sehr verbreitet. Implementiere eine Reihe grundlegender Listenoperationen, ohne vorhandene Funktionen zu verwenden.

Die genaue Anzahl und die Namen der Operationen, die du implementieren sollst, hängen vom jeweiligen Track ab, damit es keine Konflikte mit vorhandenen Namen gibt. Die allgemeinen Operationen, die du implementierst, sind:

  • append (füge bei zwei gegebenen Listen alle Elemente der zweiten Liste ans Ende der ersten Liste an);
  • concatenate (kombiniere bei einer Reihe von Listen alle Elemente aller Listen zu einer einzigen flachen Liste);
  • filter (gib bei einem Prädikat und einer Liste die Liste aller Elemente zurück, für die predicate(item) True ist);
  • length (gib bei einer Liste die Gesamtzahl der darin enthaltenen Elemente zurück);
  • map (gib bei einer Funktion und einer Liste die Liste der Ergebnisse zurück, die du erhältst, wenn du function(item) auf alle Elemente anwendest);
  • foldl (wenn du eine Funktion, eine Liste und einen Anfangswert für den Akkumulator hast, falte (reduziere) jedes Element von links in den Akkumulator);
  • foldr (wenn du eine Funktion, eine Liste und einen Anfangswert für den Akkumulator hast, falte (reduziere) jedes Element von rechts in den Akkumulator);
  • reverse (gib bei einer Liste eine Liste mit allen ursprünglichen Elementen zurück, aber in umgekehrter Reihenfolge).

Beachte, dass die Reihenfolge, in der die Argumente an die fold-Funktionen (foldl, foldr) übergeben werden, wichtig ist.

Hinweise

In Java gilt es als bewährte Praxis, Instanzmethoden gegenüber Klassenmethoden zu bevorzugen. Es gibt jedoch Bedingungen, unter denen es absolut angemessen ist, dass eine Funktion static ist. Da Klassen in Java für Änderungen geschlossen sind (d. h. du kannst einer Klasse außerhalb ihrer Definition keine Member hinzufügen, wie du es in anderen Sprachen wie Ruby oder JavaScript kannst), kannst du der Klasse nicht direkt neues Verhalten hinzufügen. Was also tun, wenn du trotzdem Verhalten für einen bestimmten Typ definieren möchtest? Die idiomatische Lösung ist in diesem Fall, eine Utility-Methode zu schreiben. Sammlungen solcher Methoden werden oft als „Utility-Klassen“ bezeichnet. Beispiele für solche Klassen in der JRE sind Arrays und Collections. In dieser Übung möchten wir, dass eine List die Methoden map(), reduce(), filter() usw. hat. Das tut sie nicht, also verwenden wir statische Methoden.

Die Methoden foldLeft und foldRight sind „Fold“-Funktionen, ein Konzept, das in der Welt der funktionalen Programmierung wohlbekannt ist, in der objektorientierten dagegen weniger. Sieh dir die Wikipedia-Seite zu Fold an: dort findest du allgemeine Hintergründe und Hinweise zu Signatur und Implementierung.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Java Exercism

Bereit, mit Listenoperationen zu starten?

Melde dich bei Exercism an, um Java mit 26 Konzepte158 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.

Tauche tiefer in Listenoperationen ein!

Genieße eine praktische Einführung in die Rekursion, erkunde die imperativen und funktionalen Alternativen zu Listenoperationen und tauche tief in Endrekursion und Akkumulatorfunktionen ein.