Objectivos: Prática com Stream<T>
, Spliterator<T>
e o idioma internal
iteration.
Data limite de entrega: 25 de Abril de 2019
NOTA: Implemente os testes unitários necessários para validar o funcionamento das funcionalidades pedidas.
No âmbito da biblioteca jingle pretende-se substituir a utilização de
Iterator<T>
por Stream<T>
.
Siga os passos seguintes para a criação do módulo referente a este
trabalho:
- Copie a pasta
jingle-lazy
para uma nova pastajingle
. - Remova de
jingle/build.gradle
a linha:compile project(':jingle-util')
- Copie de
jingle-util
parajingle
o packageorg.isel.jingle.util.req
- Adicione a
settings.gradle
o novo módulojingle
.
Substitua no módulo jingle
a utilização de LazyQueries
e Iterable
por
Stream
ou Supplier<Stream>
.
O novo método cache()
adaptado para Supplier<Stream>
deve ser implementado
numa classe StreamUtils
do módulo jingle
.
Pretende-se adicionar à classe Artist
o método getTracksRank(String country)
que retorna uma sequência de instâncias de TrackRank
com as propriedades:
name
, url
, duration
e rank
, esta última de tipo int
. A propriedade
rank
tem o ranking dessa música (track) para o país passado em country
.
Caso aquela música não conste do ranking do país então rank
tem o seu valor
por omissão 0 (zero).
Implemente o método getTracksRank(String country)
seguindo a mesma abordagem
dos métodos getAlbums
e getTracks
, isto é com recurso a um método
getTracksRank(String artistMbId, String country)
de JingleService
que por
sua vez recorre à classe LastfmWebApi
.
Abordagem:
-
Implemente em
StreamUtils
um métodomerge
que junta duas sequências com os critérios do exemplo seguinte. Dadoseq1 = {“isel”, “ola”, “dup”, “super”, “jingle” }
eseq2 = {4, 5, 6, 7}
então fazendo omerge
que tenha como critério de junção(str, nr) -> str.length == nr
e como transformação(str, nr) -> str + nr
resulta numa sequência{“isel4”, “ola0”, “dup0”, “super5”, “jingle6”}
-
Implemente em
LastfmWebApi
o métodogetTopTracks(String country, int page)
que obtém uma página do ranking de musicas num país através do método geo.getTopTracks da API Restful de Lastfm:
https://www.last.fm/api/show/geo.getTopTracks. -
Implemente em
JingleService
o métodogetTopTracks(String country)
que retorna o ranking completo de todas as músicas num país. -
Implemente em
JingleService
o métodogetTracksRank(String artistMbId, String country)
que faz o merge das sequências dadas porgetTracks(String artistMbid)
e o top 100 de um país dado porgetTopTracks(String country)
. Caso uma música deartistMbid
não conste no ranking dado porgetTopTracks
então essa música fica com o ranking 0. Implemente esta funcionalidade com auxilio do métodomerge
da alínea 1 ou uma adaptação desse método.