Che materia stai cercando?

Java - Utilizzo Lambda Expression & Streams - Esercitazione Svolta 2

Esercitazione svolta. Viene fornita una interfaccia con descrizione dei metodi da implementare e una classe di testing per verificare l'implementazione dell'alunno; L'implementazione avviene con l'utilizzo delle nuove funzioni di Java 8 come Lambda Expressions e Streams.

Esame di Programmazione ad Oggetti docente Prof. M. Viroli

Anteprima

ESTRATTO DOCUMENTO

*

* @throws NoSuchElementException quando non ci sono canzoni

*/

public Optional<String> longestSong() {

return Optional.of(this.songs

.stream()

.max((s1, s2) -> Double.compare(s1.duration, s2.duration))

.orElseThrow( () -> new NoSuchElementException("There are no songs"))

.getSongName());

}

@Override

public Optional<String> longestAlbum() {

final Map<Optional<String>, Double> songsByAlbum = this.songs.stream()

.collect( groupingBy( Song::getAlbumName,

collectingAndThen(

summingDouble(Song::getDuration), x -> x)));

return songsByAlbum

.entrySet()

.stream()

.max((e1, e2) -> Double.compare(e1.getValue(), e2.getValue()))

.orElseThrow( () -> new NoSuchElementException("There are no albums or

there are no songs in the albums"))

.getKey();

}

private static final class Song {

private final String songName;

private final Optional<String> albumName;

private final double duration;

private int hash;

private Song(final String name, final Optional<String> album,

final double len) {

super();

this.songName = name;

this.albumName = album;

this.duration = len;

}

public String getSongName() {

return songName;

}

public Optional<String> getAlbumName() {

return albumName;

}

public double getDuration() {

return duration;

}

@Override

public int hashCode() {

if (hash == 0) {

hash = songName.hashCode() ^ albumName.hashCode()

^ Double.hashCode(duration);

}

return hash;

}

@Override

public boolean equals(final Object obj) {

if (obj instanceof Song) {

final Song other = (Song) obj;

return albumName.equals(other.albumName)

&& songName.equals(other.songName)

&& duration == other.duration;

}

return false;

}

@Override

public String toString() {

return "Song [songName=" + songName + ", albumName=" + albumName

+ ", duration=" + duration + "]";

}

}

}

/*************************************************************************************/

/* Classe di testing dell’implementazione da salvare in un file TestMusicGroup.java

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import java.util.Optional;

import org.junit.Before;

import org.junit.Test;

import static java.util.stream.Collectors.toList;

import static org.junit.Assert.assertTrue;

import static org.junit.Assert.assertEquals;

/*

* CHECKSTYLE:OFF

*

* This comment shuts down checkstyle: in a test suite, magic numbers are tolerated.

*/

public class TestMusicGroup {

private static final String UNTITLED = "untitled";

private static final String III = "III";

private MusicGroup lz;

@Before

public void setUp() {

lz = new MusicGroupImpl();

lz.addAlbum("I", 1969);

lz.addAlbum("II", 1969);

lz.addAlbum(III, 1970);

lz.addAlbum(UNTITLED, 1971);

lz.addSong("Dazed and Confused", Optional.of("I"), 6.5);

lz.addSong("I Can't Quit You Baby", Optional.of("I"), 4.6);

lz.addSong("Whole Lotta Love", Optional.of("II"), 5.5);

lz.addSong("Ramble On", Optional.of("II"), 4.6);

lz.addSong("Immigrant Song", Optional.of(III), 2.4);

lz.addSong("That's the Way", Optional.of(III), 5.4);

lz.addSong("Black Dog", Optional.of("untitled"), 4.9);

lz.addSong("When the Levee Breaks", Optional.of("untitled"), 7.1);

lz.addSong("Travelling Riverside Blues", Optional.empty(), 5.2);

}

@Test

public void testAlbumNames() {

final List<String> result = new ArrayList<>();

result.add("II");

result.add(UNTITLED);

result.add("III");

result.add("I");

final List<String> actual = lz.albumNames().collect(toList());

assertTrue(actual.containsAll(result));

assertTrue(lz.albumNames().collect(toList()).containsAll(result));

}

@Test

public void testOrderedSongNames() {


PAGINE

7

PESO

47.50 KB

AUTORE

siboXD

PUBBLICATO

+1 anno fa


DETTAGLI
Corso di laurea: Corso di laurea in ingegneria e scienze informatiche
SSD:
Università: Bologna - Unibo
A.A.: 2015-2016

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher siboXD di informazioni apprese con la frequenza delle lezioni di Programmazione ad Oggetti e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Bologna - Unibo o del prof Viroli Mirko.

Acquista con carta o conto PayPal

Scarica il file tutte le volte che vuoi

Paga con un conto PayPal per usufruire della garanzia Soddisfatto o rimborsato

Recensioni
Ti è piaciuto questo appunto? Valutalo!

Altri appunti di Programmazione ad oggetti

Java - Utilizzo Lambda Expression & Streams - Esercitazione Svolta 3
Esercitazione
Java - Utilizzo Lambda Expression - Esercitazione Svolta 1
Esercitazione
Programmazione a Oggetti in Java - Relazione di progetto (videogioco)
Appunto
Programmazione Reattiva - Appunti dettagliati di teoria (35 pagine)
Appunto