/* * Olio-ohjelmoinnin perusteet I. * * Merkkijonojen käsittelyä aggregaatio-operaatioilla. * * Jorma Laurikkala (jorma.laurikkala@tuni.fi). * * Viimeksi muutettu 18.2.2020. * */ // Otetaan käyttöön Collections-kirjaston osat ja virrat. import java.util.*; import java.util.stream.*; public class AggregaatioDemo3 { public static void main(String[] args) { // Muodostetaan taulukosta linkitetty lista. String[] nimet = { "Python", "Java", "C", "C++", "PHP", "JavaScript" }; LinkedList nimilista = new LinkedList<>(Arrays.asList(nimet)); // Lasketaan lyhimmän sanan pituus. OptionalInt on luokka, jonka olio // joko sisältää int-tyyppisen arvon tai ei sisällä tällaistä arvoa. OptionalInt minPituus = nimilista.stream() // Muunnetaan sanojen virta sanojen pituuksien muodostamaksi // kokonaislukujen virraksi. .mapToInt(e -> e.length()) // Yhden tunnusluvun laskeva pääteoperaatio. .min(); // Tulostetaan tunnusluku, jos sellainen on voitu laskea. // "Length of the shortest word: 1." minPituus.ifPresent(e -> System.out.println("Length of the shortest word: " + e + ".")); // Lasketaan sanojen pituuksien tunnusluvut yhdellä pääteoperaatiolla. IntSummaryStatistics tunnusluvut = nimilista.stream() // Muunnetaan sanojen virta sanojen pituuksien muodostamaksi // kokonaislukujen virraksi. .mapToInt(e -> e.length()) // Useita tunnuslukuja laskeva pääteoperaatio. .summaryStatistics(); // Tulostetaan tunnusluvut sellaisenaan. // "IntSummaryStatistics{count=6, sum=27, min=1, average=4,500000, max=10}" System.out.println(tunnusluvut); // Tulostetaan yksi tunnusluku. // "Average word length: 4.5" System.out.println("Average word length: " + tunnusluvut.getAverage()); } }