Untitled
unknown
plain_text
a year ago
4.8 kB
3
Indexable
Never
package fp.shows; import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import fp.common.Puntuacion; import fp.utiles.Checkers; public class Cinematografica { private LocalDate fechaEstreno; private String nombre; private Integer usuarios; private Boolean compartida; private List<Serie> series; public Cinematografica(LocalDate fechaEstreno, String nombre,Integer usuarios,Boolean compartida, List<Serie> series) { super(); this.fechaEstreno = fechaEstreno; this.nombre = nombre; this.usuarios=usuarios; this.compartida=compartida; this.series = new ArrayList<>(series); } public Cinematografica( String nombre,Integer usuarios,Boolean compartida) { super(); Checkers.check("El nombre de la serie no puede estar vacío", !nombre.isEmpty()); this.fechaEstreno = LocalDate.now(); this.nombre = nombre; this.usuarios=usuarios; this.compartida=compartida; this.series = new ArrayList<>(); } public Boolean getCompartida() { return compartida; } public void setCompartida(Boolean compartida) { this.compartida = compartida; } public LocalDate getFechaEstreno() { return fechaEstreno; } public String getNombre() { return nombre; } public Integer getUsuarios() { return usuarios; } public List<Serie> getSeries() { return new ArrayList<>(series); } @Override public String toString() { return "Cinematografica [fechaEstreno=" + fechaEstreno + ", nombre=" + nombre + ", usuarios=" + usuarios + ", compartida=" + compartida + ", series=" + series + "]"; } @Override public int hashCode() { return Objects.hash(fechaEstreno, nombre); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Cinematografica other = (Cinematografica) obj; return Objects.equals(fechaEstreno, other.fechaEstreno) && Objects.equals(nombre, other.nombre); } //Otras operaciones public Integer getNumeroSeries() { return series.size(); } public void añadeSerie(Serie s) { if (!series.contains(s)) { series.add(s); } } public void añadeSeries(Collection<Serie> c) { for (Serie r: c) { añadeSerie(r); } } public void eliminaSerie(Serie s) { series.remove(s); } // 1.Si hay series estrenada en ese año vuelve true si no devuelve false. (Tratamiento: existe) public Boolean existeSerieEstrenadaEnTalAño(Integer año ) { Boolean existeSerie = false; for (Serie s: series) { if (s.getFechaEstreno().getYear()==año) { existeSerie = true; break; } } return existeSerie; } // 2. Media calificacion de las series por el numero de temporadas. (Tratamiento: media) public Double getMediaCalificacionSeriePorTemporada( Integer temporadas) { Double sumaCalificacion = 0.; Integer numeroSeries = 0; for (Serie s: series) { if (s.getTemporadas().equals(temporadas) ) { sumaCalificacion += s.getCalificacion(); numeroSeries++; } } Double media = null; if (numeroSeries > 0) { media = sumaCalificacion / numeroSeries; } return media; } // 3. Series con directores. public List<String> getSeriesConDirectores(Set<String> directores) { List<String> seriesConDirectores = new ArrayList<>(); for (Serie s: series) { List<String> directoresComunes = new ArrayList<>(s.getDirectores()); directoresComunes.retainAll(directores); if (!directoresComunes.isEmpty()) { seriesConDirectores.add(s.getNombre()); } } return seriesConDirectores; } // 4. (Tratamiento: Map con valores de tipo colección) public Map<Genero, List<Serie>> getSeriesPorGenero() { Map<Genero, List<Serie>> res = new HashMap<>(); for (Serie s: series) { Genero ge = s.getGenero(); if (res.containsKey(ge)) { res.get(ge).add(s); } else { List<Serie> lista = new ArrayList<>(); lista.add(s); res.put(ge, lista); } } return res; } // 5. (Tratamiento: Map contador) public Map<String, Integer> getNumeroSeriesConPais() { Map<String, Integer> res = new HashMap<>(); for (Serie s: series) { List<String> paises = s.getPaises(); for (String pais:paises) { if (res.containsKey(pais)) { res.put(pais, res.get(pais) + 1); } else { res.put(pais,1); } } } return res; } }