Skip to content

ohjelmointi2/streams-and-lambdas

Repository files navigation

Streamit ja Lambdat

Tässä tehtävärepositoriossa perehdytään Javan stream-apiin sekä lambda-lausekkeisiin. Harjoitus on jaettu osiin, joista jokainen sisältää Java-luokan, jossa on keskeneräisiä metodeja. Tavoitteesi on täydentää näiden metodien logiikkaa käyttäen streameja ja lambdoja.

Suositellut itseopiskelumateriaalit:

Tehtävien testaaminen

Tämä tehtäväpaketti ei sisällä ns. "pääohjelmaa" (main-metodia). Pääohjelman sijasta paketti sisältää jokaiselle tehtävän osalle omat JUnit-yksikkötestit. Testeihin perehtyminen ei ole tehtävän suorittamiseksi välttämätöntä, mutta testien suorittaminen on ehdottomasti suositeltua, jotta saat palautetta tekemiesi ratkaisujen toimivuudesta.

Voit suorittaa yksikkötestit koodieditorisi testaustyökalulla (VS Code, Eclipse) tai Gradle-automaatiotyökalulla. Halutessasi voit myös toteuttaa omia main-metodeja, joiden avulla kokeilet ratkaisujesi toimivuutta.

💡 Saat kirjoittaa halutessasi lisää testejä, mutta älä muuta tai poista valmiiksi kirjoitettuja testejä.

💡 Tehtävänannossa määritettyjen metodien ja luokkien nimien, parametrien tai paluuarvojen muuttaminen ei ole sallittua testien toimivuuden varmistamiseksi.

Tehtävän palauttaminen

Palauta tehtävä Gitin add-, commit- ja push-komennoilla edellisten tehtävien tavoin. Voit lähettää ratkaisusi arvioitavaksi niin monta kertaa kuin on tarpeen tehtävän määräaikaan asti. Varmista kuitenkin, että viimeisin suoritus tuottaa parhaat pisteet, koska vain viimeisimmät pisteet jäävät voimaan.

Osa 1: IntegerStreams (perusteet, 10 %)

Tässä osassa opit hyödyntämään Javan IntStream-luokan valmiita metodeja, jotka suorittavat tyypillisiä laskuoperaatioita striimeille, jotka sisältävät ainoastaan kokonaislukuja. Tehtävän tukena tarvitset mm. Javan dokumentaatiota.

Täydennä IntegerStreams-luokassa olevat metodit niiden kommenttien ja vinkkien mukaisesti. Tehtävän tämä osa testataan IntegerStreamsTest-testiluokalla, jonka voit suorittaa joko koodieditorisi testaustyökalulla, tai Gradlella:

./gradlew test --tests IntegerStreamsTest      # unix
.\gradlew.bat test --tests IntegerStreamsTest  # windows

Osa 2: OptionalValues (perusteet, 10 %)

Tässä osassa opit käsittelemään tilanteita, joissa stream ei välttämättä sisällä yhtään arvoa, mikä tulee huomioida esimerkiksi keskiarvoa tai ääriarvoja selvitettäessä. Java hyödyntää tällaisissa tilanteissa "optional"-olioita, joista voit lukea lisää Javan dokumentaatiosta: Optional, OptionalDouble ja OptionalInt.

Täydennä OptionalValues-luokassa olevat metodit niiden kommenttien ja vinkkien mukaisesti. Tehtävän tämä osa testataan OptionalValuesTest-testiluokalla, jonka voit suorittaa joko koodieditorisi testaustyökalulla tai Gradlella:

./gradlew test --tests OptionalValuesTest      # unix
.\gradlew.bat test --tests OptionalValuesTest  # windows

Osa 3: ListsAndStreams (perusteet, 10 %)

Tässä osassa opit luomaan striimejä listoista sekä muodostamaan listoja streameista.

Täydennä tiedostossa ListsAndStreams.java olevat metodit niiden kommenttien ja vinkkien mukaisesti. Tehtävän tämä osa testataan ListsAndStreamsTest.java-testiluokalla, jonka voit suorittaa joko koodieditorisi testaustyökalulla, tai Gradlella:

./gradlew test --tests ListsAndStreamsTest      # unix
.\gradlew.bat test --tests ListsAndStreamsTest  # windows

Osa 4: MappingStreams (perusteet, 10 %)

Tässä osassa opit muodostamaan uusia streameja muuntamalla olemassa olevan streamin arvoja. Muunnoksissa tarvitset operaatioita, jotka toteutetaan tyypillisesti lambda-lausekkeina.

Täydennä tiedostossa MappingStreams.java olevat metodit niiden kommenttien ja vinkkien mukaisesti. Tehtävän tämä osa testataan MappingStreamsTest.java-testiluokalla, jonka voit suorittaa joko koodieditorisi testaustyökalulla, tai Gradlella:

./gradlew test --tests MappingStreamsTest      # unix
.\gradlew.bat test --tests MappingStreamsTest  # windows

Osa 5: FilteringStreams (perusteet, 10 %)

Hyvin tavallinen streamien käyttötapaus on aineiston suodattaminen eli filtteröinti. Tässä osassa opit suodattamaan striimeistä vain tietyt ehdot täyttävät arvot, jotka tulevat osaksi uutta striimiä.

Täydennä tiedostossa FilteringStreams.java olevat metodit niiden kommenttien ja vinkkien mukaisesti. Tehtävän tämä osa testataan FilteringStreamsTest.java-testiluokalla, jonka voit suorittaa joko koodieditorisi testaustyökalulla, tai Gradlella:

./gradlew test --tests FilteringStreamsTest      # unix
.\gradlew.bat test --tests FilteringStreamsTest  # windows

Osa 6: PredicatesWithStreams (perusteet, 10 %)

Tässä tehtävässä opit tarkastamaan koko striimiä koskevia ehtoja.

Täydennä tiedostossa PredicatesWithStreams.java olevat metodit niiden kommenttien ja vinkkien mukaisesti. Tehtävän tämä osa testataan PredicatesWithStreamsTest.java-testiluokalla, jonka voit suorittaa joko koodieditorisi testaustyökalulla, tai Gradlella:

./gradlew test --tests PredicatesWithStreamsTest      # unix
.\gradlew.bat test --tests PredicatesWithStreamsTest  # windows

Osa 7: ObjectStreams (soveltava, 10 %)

Tässä osassa sovellamme Javan streameja oman Person-luokan kanssa. Tulet huomaamaan, että omien luokkien käsittely streameilla on lopulta hyvin samanlaista kuin Javan valmiiden tietotyyppien käsittely.

Täydennä tiedostossa ObjectStreams.java olevat metodit niiden kommenttien ja vinkkien mukaisesti. Tehtävän tämä osa testataan ObjectStreamsTest.java-testiluokalla, jonka voit suorittaa joko koodieditorisi testaustyökalulla, tai Gradlella:

./gradlew test --tests ObjectStreamsTest      # unix
.\gradlew.bat test --tests ObjectStreamsTest  # windows

Osa 8: PersonStreams (soveltava, 10 %)

Tässä osassa sovellamme oppimaamme ja muunnamme merkkijonoja Person-olioiksi ja toisin päin. Opimme myös tekemään soveltavia operaatioita, kuten kaikkien striimissä olevien henkilöiden iän kasvattamisen yhdellä vuodella.

Täydennä tiedostossa PersonStreams.java olevat metodit niiden kommenttien ja vinkkien mukaisesti. Tehtävän tämä osa testataan PersonStreamsTest.java-testiluokalla, jonka voit suorittaa joko koodieditorisi testaustyökalulla, tai Gradlella:

./gradlew test --tests PersonStreamsTest      # unix
.\gradlew.bat test --tests PersonStreamsTest  # windows

Osa 9: PizzaStreams (edistynyt, 20 %)

Tehtävän viimeisessä osassa käsittelemme Pizzoja ja pizzojen täytteitä streamien avulla. Keskitymme erityisesti ananakseen, joka on täytteenä erityisen kiistanalainen. Ohessa harjoittelemme soveltavia operaatioita, kuten streamien järjestämistä.

Täydennä tiedostossa PizzaStreams.java olevat metodit niiden kommenttien ja vinkkien mukaisesti. Tehtävän tämä osa testataan PizzaStreamsTest.java-testiluokalla, jonka voit suorittaa joko koodieditorisi testaustyökalulla, tai Gradlella:

./gradlew test --tests PizzaStreamsTest      # unix
.\gradlew.bat test --tests PizzaStreamsTest  # windows

Lisenssi ja tekijät

Tämän tehtävän on kehittänyt Teemu Havulinna ja se on lisensoitu Creative Commons BY-NC-SA -lisenssillä.

Tehtävänannon, käsiteltävien tiedostojen sekä lähdekoodien toteutuksessa on hyödynnetty ChatGPT 3.5:ttä sekä GitHub copilot -tekoälyavustinta.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages