Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void assignBestPackage(LinkedList<Package> packageList){ // Para una lista de los packages disponibles, con las medidas del Item, nos dirá que package es mejor.
- Package bestPackage = null;
- Double bestDifferenceMean = 0.0;
- if (this.getSize()[2] < 3){ // Si nuestro item tiene una profundidad menor que 3, significa que se puede empaquetar en un 'Envelope'.
- // Para una LinkedList de Packages, nos devuelve aquellos elementos que son Envelopes, como esta función transforma packageList a una lista, ya no tenemos una LinkedList.
- // El no tener una LinkedList no es un problema, ya que esta lista simplemente sirve para recorrerla, no hará falta modificarla.
- List<Package> envelopesList = packageList.stream().filter(e -> e instanceof Envelope).collect(Collectors.toList());
- for (int i=0; i<envelopesList.size(); i++){
- Envelope currentEnvelope = (Envelope) envelopesList.get(i);
- // A continuación calcularemos la diferencia que hay entre la altura y la anchura de nuestro paquete, respecto el envoltorio.
- Double xDifference = currentEnvelope.getWidth() - this.getSize()[0]; Double yDifference = currentEnvelope.getHeight() - this.getSize()[1];
- if (xDifference >= 0 && yDifference >= 0){ // Si nuestro paquete cabe en el envoltorio.
- Double differenceMean = (xDifference + yDifference) / 2; // Calculamos la media de la diferencia.
- if (differenceMean < bestDifferenceMean || bestPackage == null){ // Si es la mejor media que hemos tenido o no hemos asignado aún ningún paquete, este es el nuevo mejor paquete.
- bestDifferenceMean = differenceMean;
- bestPackage = currentEnvelope;
- }
- }
- }
- }
- else{ // En caso de que nuestro paquete no se pueda enpaquetar en un 'Envelope'.
- // En este caso, filtraremos nuestra LinkedList de packages para obtener las que son cajas.
- List<Package> boxesList = packageList.stream().filter(e -> e instanceof Box).collect(Collectors.toList());
- for (int i=0; i<boxesList.size(); i++){
- Box currentBox = (Box) boxesList.get(i);
- Double xDifference = currentBox.getWidth() - this.getSize()[0];
- Double yDifference = currentBox.getHeight() - this.getSize()[1];
- Double zDifference = currentBox.getDepth() - this.getSize()[2];
- if (xDifference >= 0 && yDifference >= 0 && zDifference >= 0){
- Double differenceMean = (xDifference + yDifference + zDifference) / 3;
- if (differenceMean < bestDifferenceMean || bestPackage == null){
- bestDifferenceMean = differenceMean;
- bestPackage = currentBox;
- }
- }
- }
- }
- this.setPack(bestPackage);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement