sábado, 20 de janeiro de 2018

Javafx - removendo valores repetidos com HashSet

Já sabemos que a interface Set não aceita
valores duplicados, bem diferente de List
que permite que seus elementos sejam repetidos.
Nada melhor do que mostrar isto na prática.
Na primeira lista de um ArrayList inserimos
100 números entre 0 e 100 gerados pelo método
Math.random ( ), onde naturalmente vieram
muitos números repetidos, isto é mostrado
na primeira tela do primeiro stage do javafx.
Criei uma nova classe e adicionei um novo stage,
e este novo stage recebeu como parâmetros o
ArrayList criado no primeiro stage da classe
principal PROJETO, e em seguida declaramos
a interface Set recebendo o ArrayList recebido
para a remoção dos elementos repetidos,
fazendo também a ordenação destes elementos
automaticamente.
Para finalizar criei uma nova lista para receber
os elementos do hashset, que poderia ser imprimido
diretamente, mas por questões de organização da
impressão na tela escolhi esta opção.

  
Veja abaixo imagens do programa em execução:



Veja abaixo o código do programa:


import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javafx.application.Application;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import javafx.scene.paint.Color;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.Pane;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;

class Newclass {
     static Canvas canvas = new Canvas ( 620, 350 );
     static GraphicsContext ctx = canvas.getGraphicsContext2D ( );
     static Pane ro_ot = new Pane ( );
     static Scene sce_ne = new Scene ( ro_ot, 620, 350 );
     public void Informe ( ) {
         ctx.setFill ( Color.RED );
         ctx.fillText ( "Por: ", 200, 242 );
         ctx.setFill ( Color.BLUE );
         ctx.fillText ( "Samuel Lima", 260, 242 );
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "sa_sp10@hotmail.com", 200, 260 );
         ctx.setFill ( Color.RED );
         ctx.fillText ( " MUITO OBRIGADO", 240, 290 );
     }
     static Button btn_1 = new Button ( "Sair" );
     public static Node But_ton_2 ( Stage stage ) {
         btn_1.setPrefWidth ( 80 );// Largura do botão
         btn_1.setLayoutX ( 267 );// Posição do botão coluna
         btn_1.setPrefHeight ( 20 );// altura do botão
         btn_1.setLayoutY ( 300 );// //Posição do botão linha     
         btn_1.setStyle ( "-fx-padding: 1;" + "-fx-border-style: solid inside;"
                   + "-fx-border-width: 2;" + "-fx-border-insets: 1;"
                   + "-fx-border-radius: 1;" + "-fx-border-color: blue;"
                   + "-fx-font-style: italic;"
                   + "-fx-font-family: Consolas;"
                   );
         btn_1.setOnKeyPressed ( e -> {
              if ( e.getCode ( ) == KeyCode.ENTER ) {
                   System.exit ( 0 );
              }
         } );
         return btn_1;
     }
     public void start ( Stage stage, ArrayList < Integer > arr ) {
         int i;
         String str1 = " ";
         stage.setTitle ( "HASHSET - REMOVENDO VALORES REPETIDOS" );
         ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 15 ) );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "HASHSET - REMOVENDO VALORES REPETIDOS", 140, 50 );
         // Criando moldura e dando efeitos
         ro_ot.setStyle ( "-fx-padding: 5;" + "-fx-border-style: solid inside;"
                   + "-fx-border-width: 18;" + "-fx-border-insets: 5;"
                   + "-fx-border-radius: 5;" + "-fx-border-color: blue;" );
         But_ton_2 ( stage );
         Informe ( );
         ctx.setFill ( Color.BLUE );
         ctx.fillText ( "Lista ordenada e sem os elementos repetidos ", 170, 80 );
         // Fazendo a conversão de ArrayList para HashSet
         // Set ordena e remove todos os elementos repetidos
         Set < Integer > Hash_Set = new HashSet < > ( arr );
         // Criando uma lista com os elementos do HashSet
         List < Integer > list = new ArrayList < Integer > ( Hash_Set );
         // Percorrendo cada elemento da lista e imprimindo
         for ( i = 0; i < list.size ( ); i++ ) { 
              if ( i % 10 == 0 ) {
                   str1 += "\n";
              }
              if ( list.get ( i ) >= 0 && list.get ( i ) <= 9 ){
                   str1 +=  "0";
              }
              str1 += list.get ( i ) + "   ";
         }
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( str1, 180, 100 );
         stage.setScene ( sce_ne );
         ro_ot.getChildren ( ).addAll ( canvas, btn_1 );
         stage.show ( );
     }
}
////////////////////////////////////////////////////////////////////////////////
public class PROJETO extends Application {
     //public static int TAM = 100;
     static Canvas canvas = new Canvas ( 620, 350 );
     static GraphicsContext ctx = canvas.getGraphicsContext2D ( );
     static Pane ro_ot = new Pane ( );
     static Scene sce_ne = new Scene ( ro_ot, 620, 350 );
     static Button btn_1 = new Button ( "ENTER" );
     static Newclass nova = new Newclass ( );
     // ////////////////////////////////////////////////////////////////////////
     public static Node But_ton_3 ( Stage stage, ArrayList < Integer > arr ) {
         btn_1.setPrefWidth ( 80 );// Largura do botão
         btn_1.setLayoutX ( 267 );// Posição do botão coluna
         btn_1.setPrefHeight ( 20 );// altura do botão
         btn_1.setLayoutY ( 300 );// //Posição do botão linha     
         btn_1.setStyle ( "-fx-padding: 1;" + "-fx-border-style: solid inside;"
                   + "-fx-border-width: 2;" + "-fx-border-insets: 1;"
                   + "-fx-border-radius: 1;" + "-fx-border-color: blue;"
                   + "-fx-font-style: italic;"
                   + "-fx-font-family: Consolas;"
                   );
         btn_1.setOnKeyPressed ( e -> {
              if ( e.getCode ( ) == KeyCode.ENTER ) {
                   nova.start ( stage, arr );
              }
         } );
         return btn_1;
     }
     // ////////////////////////////////////////////////////////////////////////
     public void start ( Stage stage ) {
         ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 15 ) );
         stage.setTitle ( "HASHSET - REMOVENDO VALORES REPETIDOS" );
         // Criando moldura e dando efeitos
         ro_ot.setStyle ( "-fx-padding: 5;" + "-fx-border-style: solid inside;"
                   + "-fx-border-width: 18;" + "-fx-border-insets: 5;"
                   + "-fx-border-radius: 5;" + "-fx-border-color: grey;" );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "HASHSET - REMOVENDO VALORES REPETIDOS", 140, 50 );
         // Declarando ArrayList com valor pré-determinado
         ArrayList < Integer > arr = new ArrayList < > ( 100 );
         int i;
         String str = " ";
         ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 15 ) );
         ctx.setFill ( Color.BLUE );
         ctx.fillText ( "ArrayList com todos os elementos gerados", 170, 80 );
         ctx.setFont ( Font.font ( "Arial", FontWeight.BOLD, 14 ) );
         // Preenchendo o ArrayList com laço for
         for ( i = 1; i < 101; i++ ) {
              arr.add ( ( int ) ( Math.random ( ) * 100 ) );
         }
         for ( i = 0; i < arr.size ( ); i++ ) { 
              if ( i % 10 == 0 ) {
                   str += "\n";
              }
              if ( arr.get ( i ) >= 0 && arr.get ( i ) <= 9 ){
                   str +=  "0";
              }
              str += arr.get ( i ) + "   ";
         }
         ctx.setFill ( Color.MAGENTA );
         ctx.fillText ( str, 180, 100 );
         But_ton_3 ( stage, arr );
         ro_ot.getChildren ( ).addAll ( canvas, btn_1 );
         stage.setScene ( sce_ne );
         stage.show ( );
     }
     // /////////////////////////////////////////////////////////////////////////
     public static void main ( String [ ] args ) {
         Application.launch ( args );
     }
}

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.