studyklar
GdI 2 · Übungsblatt 9 · Aufgabe 1

Preise um 10 % erhöhen: ein Lambda mit forEach

Vier Produkte sollen 10 % teurer werden. Bisher hätten wir dafür eine Schleife geschrieben. Jetzt geben wir der Liste stattdessen eine kleine namenlose Methode mit, ein Lambda. Die Liste wendet sie selbst auf jedes Produkt an. Rechts steht die Klasse des aktuellen Teils, die Zeilen zum Schritt sind hervorgehoben. Mit Weiter geht es Schritt für Schritt voran.

Die Aufgabe

Aufgabe 1

Erstellen Sie eine Klasse Produkt mit den Attributen name und preis sowie Methoden zum Abfragen des Preises, zum Erhöhen des Preises – und eine toString-Methode.

Erstellen Sie eine Klasse ProduktApp mit einer main-Methode. Legen Sie in der main-Methode eine Liste mit mehreren verschiedenen Produkten an.

Nun soll der Preis aller Produkte um 10% erhöht werden. Hierzu soll ein Lambda-Ausdruck verwendet werden. Schreiben Sie diesen Lambda-Ausdruck und wenden Sie ihn mit Hilfe von „forEach“ auf jedes Produkt in der Liste an.

Geben Sie anschließend jedes Produkt auf der Konsole aus. Hierzu soll ebenfalls ein Lambda-Ausdruck oder eine Methodenreferenz verwendet werden.

Zuerst entsteht eine gewöhnliche Klasse Produkt. Neu ist erst der zweite Teil: Statt mit einer Schleife über die Liste zu gehen, übergeben wir der Methode forEach der Liste ein Lambda. Das Lambda sagt, was mit einem Produkt passieren soll. forEach erledigt das für alle.

Merke: Ein Lambda ist eine Methode ohne Namen, die man wie einen Wert weitergeben kann. Links vom Pfeil -> steht der Parameter, rechts, was mit ihm geschieht.
  1. a) Klasse Produkt: Name, Preis, Preis abfragen, Preis erhöhen, toString.
  2. b) Liste anlegen, Preise per Lambda erhöhen, alle Produkte ausgeben.

Attribute und Konstruktor

public class Produkt {     private String name;    private double preis;     public Produkt(String name, double preis) {        this.name = name;        this.preis = preis;    }

Ein Produkt hat einen Namen (Text, also String) und einen Preis (Kommazahl, also double). Beide Attribute sind private. Der Konstruktor bekommt beide Werte beim Anlegen.

Aus Blatt 5, Aufgabe 1 („Eine eigene Klasse Tier mit Konstruktor und toString“): Der Konstruktor heißt wie die Klasse. this.preis ist das Attribut, preis allein der Parameter.

Preis abfragen und Preis erhöhen

    public double getPreis() {        return preis;    }     public void erhoehePreis(double erhoehung) {        preis += erhoehung;    }

getPreis() gibt den Preis zurück. erhoehePreis bekommt einen Betrag und zählt ihn zum Preis dazu. preis += erhoehung ist kurz für preis = preis + erhoehung.

Die Methode weiß nichts von 10 %. Sie erhöht um einen festen Betrag, etwa um 0,12 Euro. Wie groß der Betrag ist, rechnet später das Lambda aus. So passt dieselbe Methode auch für andere Erhöhungen.

Noch 6 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Produkt.java

ein Produkt mit Name und Preis

Abbildung 1Produkt.java

ein Produkt mit Name und Preis

public class Produkt {     private String name;    private double preis;     public Produkt(String name, double preis) {        this.name = name;        this.preis = preis;    }     public double getPreis() {        return preis;    }     public void erhoehePreis(double erhoehung) {        preis += erhoehung;    }     @Override    public String toString() {        return "Produkt [name=" + name + ", preis=" + preis + "]";    }}
LegendeDie ganze Klasse Produkt.