import java.util.*;

public class CinemaEclipse {
   
   public static void main(String[] args) {
      Scanner scanner = new Scanner(System.in);
      System.out.println("Bienvenido al Cine en Eclipse. \n Por favor, seleccione una de las opciones a continuación:");
      System.out.println("1. Comprar entradas");
      System.out.println("2. Ver cartelera");
      System.out.println("3. Ver promociones");
      System.out.println("4. Salir");
      int opcion = scanner.nextInt();
      
      switch(opcion){
         case 1: 
            comprarEntradas();
            break;
         case 2:
            verCartelera();
            break;
         case 3:
            verPromociones();
            break;
         case 4:
            System.out.println("Gracias por visitar el cine en Eclipse. Hasta luego!");
            break;
      }
   }
   
   // Implementación del patrón GoF Factory
   private static MovieFactory movieFactory = new MovieFactory();
   
   // Colección de películas de la cartelera
   private static List<Movie> cartelera = new ArrayList<>();
   
   // Colección de promociones
   private static Set<Promotion> promociones = new HashSet<>();
   
   // Coleccion de entradas vendidas
   private static Map<Movie, Integer> entradasVendidas = new HashMap<>();
   
   // Método para comprar entradas
   private static void comprarEntradas(){
      Scanner scanner = new Scanner(System.in);
      System.out.println("Por favor, seleccione una de las películas de la cartelera:");
      for(Movie movie : cartelera){
         System.out.println(movie.getTitle());
      }
      String peliculaSeleccionada = scanner.nextLine();
      
      // Busca la película dentro de la cartelera
      Movie movie = cartelera.stream()
         .filter(m -> m.getTitle().equals(peliculaSeleccionada))
         .findFirst()
         .orElse(null);
      
      if(movie != null){
         System.out.println("Cuántas entradas desea comprar?");
         int cantidadEntradas = scanner.nextInt();
         
         // Usa una expresión Lambda Supplier para obtener el precio de la entrada
         double precio = () -> movie.getPrice() * cantidadEntradas;
         
         // Usa una expresión Lambda Consumer para guardar la cantidad de entradas vendidas
         entradasVendidas.merge(movie, cantidadEntradas, Integer::sum);
         
         System.out.println("El precio total es: " + precio);
         System.out.println("Gracias por su compra!");
      }
   }
   
   // Método para ver la cartelera
   private static void verCartelera(){
      System.out.println("Cartelera:");
      cartelera.forEach(movie -> {
         // Usa una expresión Lambda Function para imprimir la cartelera
         System.out.println(movie.getTitle() + " - " + movie.getPrice() + "€");
      });
   }
   
   // Método para ver las promociones
   private static void verPromociones(){
      System.out.println("Promociones:");
      promociones.forEach(promotion -> {
         System.out.println(promotion.getName() + ": " + promotion.getDiscount() + "% de descuento!");
      });
   }
}

{"license": "epl-2.0"}
license:epl-2.0 region:us
TAGS
#license-epl-2.0 #region-us 

import URL.*;

public class CinemaEclipse {
   
   public static void main(String[] args) {
      Scanner scanner = new Scanner(URL);
      URL.println("Bienvenido al Cine en Eclipse. \n Por favor, seleccione una de las opciones a continuación:");
      URL.println("1. Comprar entradas");
      URL.println("2. Ver cartelera");
      URL.println("3. Ver promociones");
      URL.println("4. Salir");
      int opcion = scanner.nextInt();
      
      switch(opcion){
         case 1: 
            comprarEntradas();
            break;
         case 2:
            verCartelera();
            break;
         case 3:
            verPromociones();
            break;
         case 4:
            URL.println("Gracias por visitar el cine en Eclipse. Hasta luego!");
            break;
      }
   }
   
   // Implementación del patrón GoF Factory
   private static MovieFactory movieFactory = new MovieFactory();
   
   // Colección de películas de la cartelera
   private static List<Movie> cartelera = new ArrayList<>();
   
   // Colección de promociones
   private static Set<Promotion> promociones = new HashSet<>();
   
   // Coleccion de entradas vendidas
   private static Map<Movie, Integer> entradasVendidas = new HashMap<>();
   
   // Método para comprar entradas
   private static void comprarEntradas(){
      Scanner scanner = new Scanner(URL);
      URL.println("Por favor, seleccione una de las películas de la cartelera:");
      for(Movie movie : cartelera){
         URL.println(movie.getTitle());
      }
      String peliculaSeleccionada = scanner.nextLine();
      
      // Busca la película dentro de la cartelera
      Movie movie = URL()
         .filter(m -> m.getTitle().equals(peliculaSeleccionada))
         .findFirst()
         .orElse(null);
      
      if(movie != null){
         URL.println("Cuántas entradas desea comprar?");
         int cantidadEntradas = scanner.nextInt();
         
         // Usa una expresión Lambda Supplier para obtener el precio de la entrada
         double precio = () -> movie.getPrice() * cantidadEntradas;
         
         // Usa una expresión Lambda Consumer para guardar la cantidad de entradas vendidas
         URL(movie, cantidadEntradas, Integer::sum);
         
         URL.println("El precio total es: " + precio);
         URL.println("Gracias por su compra!");
      }
   }
   
   // Método para ver la cartelera
   private static void verCartelera(){
      URL.println("Cartelera:");
      cartelera.forEach(movie -> {
         // Usa una expresión Lambda Function para imprimir la cartelera
         URL.println(movie.getTitle() + " - " + movie.getPrice() + "€");
      });
   }
   
   // Método para ver las promociones
   private static void verPromociones(){
      URL.println("Promociones:");
      promociones.forEach(promotion -> {
         URL.println(promotion.getName() + ": " + promotion.getDiscount() + "% de descuento!");
      });
   }
}

TAGS
#license-epl-2.0 #region-us 

TAGS
#license-epl-2.0 #region-us 
