1.4-Software-Development-Principles

Java Stream opdrachten

Voor deze opdracht moet je zelf even een IntelliJ project aanmaken en deze code er in plakken.

Elke opdracht kan vertaald worden naar een enkele (static) methode. Dit betekent dat je in principe maar 1 klasse nodig hebt om de opdrachten uit te voeren.

Let op: Deze opdrachten zijn bedoeld om te oefenen met de Java Streams API. Je kan ze ook anders oplossen, maar dat is natuurlijk niet het doel!

Oefening 1 Normale for-lus

Tel het aantal letters voor alle strings die beginnen met een “t” met behulp van een “normale” for-lus

Oefening 2 Stream - map reduce

Tel het aantal letters voor alle strings die beginnen met een “t” met behulp van een stream (map gevolgd door reduce).

Gebruik niet de methode operator (::)

Oefening 3 Method operator

Tel het aantal letters voor alle strings die beginnen met een “t” met behulp van een stream (map gevolgd door reduce). Gebruik de method operator (::) voor de map en reduce.

Hint: Kijk naar de sum() methode geïmplementeerd in de Integer klasse.

Oefening 4 Tellen

Tel alle woorden met een even aantal letters.

Oefening 5 Gemiddelde

Wat is het gemiddelde aantal letters in de woorden?

Hint: gebruik .mapToInt() in combinatie met average() of .collect in combinatie met Collectors.averagingInt ().

Opdracht 6: Letters tellen

Schrijf een methode int countLetters(String input) die voor een gegeven input (een zin met meerdere woorden) telt hoeveel letters er in die zin staan.

Dus de input hello moet het getal 5 opleveren.

hint Kijk eens in de api van de String klasse voor methoden die een stream retourneren.

Opdracht 7: Woorden filteren op basis van een enkele letter

Schrijf een methode String[] getWordsStartingWith(char letter, String input) die voor een gegeven input en een gegeven letter, alle woorden uit input oplevert die beginnen met de meegegeven letter. Woorden mogen met een spatie gesplitst worden.

Dus de input this is a test, gefilterd door de letter t levert de volgende array op: ["this", "test"].

Opdracht 8: Bepaal het gemiddelde aantal letters van alle woorden

Schrijf een methode double calculateAverageWordLenght(String input) die het gemiddelde aantal letters berekent voor een zin met één of meerdere woorden (gesplitst met een spatie).

Dus de input this is a long test levert 3.0 op en this is a test levert 2.75 op.

Opdracht 9: Combineer opdracht 6 en 7 - Tel de letters van de gefilterde woorden.

Schrijf een methode int[] countWordsStartingWith(char letter, String input) die een zin filtert, zoals in opdracht 7 en dan telt hoeveel letters alle gefilterde woorden bevatten zoals opdracht 6.

Dus this is a test, gefilterd bij de letter t moet een array opleveren met de waarden [4, 4].

Opdracht 10: Schrijf unittests voor deze opdrachten.

Er is al een unittest geimplementeerd in de tests folder. Herschrijf de opdracht zodat de methoden een waarde terug geven, deze methoden kunnen dan eventueel static zijn.

Test alle opdrachten met verschillende input, het voorbeeld, maar ook andere lijsten of waarden.