Você está aqui: Java ::: Pacote java.util ::: Comparator |
Como escrever uma classe que implementa a interface Comparator para controlar a ordenação dos elementos de uma coleçãoQuantidade de visualizações: 2578 vezes |
Nesta dica eu mostro como escrever uma classe que implementa a interface Comparator para controlar a ordenação dos elementos de uma coleção. No exemplo mostro também como usar constantes para definir a forma de ordenação. Vamos começar criando uma classe Livro. Veja o código:---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package estudos; public class Livro{ // para simplificar o exemplo não usarei encapsulamento de dados String titulo; int paginas; // construtor não padrão public Livro(String titulo, int paginas){ this.titulo = titulo; this.paginas = paginas; } } Agora vamos criar a classe que implementará a interface Comparator: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package estudos; import java.util.Comparator; public class OrdenacaoLivros implements Comparator<Livro>{ // constantes que permitem definir o tipo de ordenação a ser realizada public final static int TITULO = 1; public final static int PAGINAS = 2; private int tipoOrdenacao; // guarda o tipo da ordenação desejada public OrdenacaoLivros(int tipoOrdenacao){ this.tipoOrdenacao = tipoOrdenacao; } // sobrescreve o método compare() e faz a ordenação de acordo com o critério desejado @Override public int compare(Livro a, Livro b){ // ordenação por páginas? if(this.tipoOrdenacao == OrdenacaoLivros.PAGINAS){ return a.paginas - b.paginas; } // ordenação por título? else if(this.tipoOrdenacao == OrdenacaoLivros.TITULO){ return a.titulo.compareTo(b.titulo); } else{ // ordenação desconhecida System.out.println("Ordenação desconhecida"); return 0; } } } Note que o método compare() testa o tipo de ordenação para classificar os livros de acordo com o número de páginas ou ordem alfabética do título. Finalmente, veja o código para a classe principal da aplicação: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package estudos; import java.util.ArrayList; import java.util.Collections; public class Estudos{ public static void main(String[] args) { // vamos criar uma ArrayList de objetos da classe Livro ArrayList<Livro> livros = new ArrayList(); livros.add(new Livro("Programando em Java", 259)); livros.add(new Livro("A Bíblia do Delphi", 1043)); livros.add(new Livro("Aprenda PHP e MySQL", 127)); livros.add(new Livro("Tutorial Básico de JSF", 41)); // vamos ordenar os elementos do ArrayList usando o método sort() da classe Collectons // e fornecendo um objeto OrdenacaoLivros com o critério de ordenação por páginas Collections.sort(livros, new OrdenacaoLivros(OrdenacaoLivros.PAGINAS)); // vamos percorrer e exibir os valores dos elementos ordenados por quantidade de página for(Livro livro : livros){ System.out.println("Título: " + livro.titulo + "; Páginas: " + livro.paginas); } // vamos ordenar os elementos do ArrayList usando o método sort() da classe Collectons // e fornecendo um objeto OrdenacaoLivros com o critério de ordenação por título Collections.sort(livros, new OrdenacaoLivros(OrdenacaoLivros.TITULO)); // vamos percorrer e exibir os valores dos elementos ordenados por título System.out.println(); for(Livro livro : livros){ System.out.println("Título: " + livro.titulo + "; Páginas: " + livro.paginas); } } } Ao executarmos este exemplo nós teremos o seguinte resultado: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- Título: Tutorial Básico de JSF; Páginas: 41 Título: Aprenda PHP e MySQL; Páginas: 127 Título: Programando em Java; Páginas: 259 Título: A Bíblia do Delphi; Páginas: 1043 Título: A Bíblia do Delphi; Páginas: 1043 Título: Aprenda PHP e MySQL; Páginas: 127 Título: Programando em Java; Páginas: 259 Título: Tutorial Básico de JSF; Páginas: 41 |
![]() |
Java ::: Coleções (Collections) ::: LinkedHashSet |
Como remover itens repetidos de uma ArrayList usando um objeto da classe LinkedHashSet do JavaQuantidade de visualizações: 651 vezes |
Em algumas situações nós temos uma ArrayList com algumas repetições e gostaríamos de remover os itens duplicados mas gostaríamos de manter a ordem original dos elementos. Para isso nós podemos usar um objeto da classe LinkedHashSet. Como sabemos, classes que implementam a interface Set possuem a habilidade de recusar itens repetidos. A classe LinkedHashSet, além de recusar duplicidades de valores, mantém a ordem de inserção dos elementos. Veja o código Java completo para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package estudos; import java.util.ArrayList; import java.util.LinkedHashSet; public class Estudos { public static void main(String[] args) { // vamos criar uma ArrayList de linguagens de programação ArrayList<String> lista = new ArrayList<>(); // vamos adicionar alguns elementos no ArrayList. Note // que temos itens repetidos lista.add("Java"); lista.add("Scala"); lista.add("Ruby"); lista.add("Scala"); lista.add("Python"); lista.add("Ruby"); lista.add("Delphi"); // vamos mostrar o conteúdo do ArrayList System.out.println("O conteúdo do ArrayList é: " + lista.toString()); // vamos criar uma instância da classe LinkedHashSet LinkedHashSet<String> set = new LinkedHashSet<>(lista); // agora construímos uma nova ArrayList sem repetições a // partir do LinkedHashSet ArrayList<String> lista2 = new ArrayList<>(set); // e mostramos o resultado System.out.println("ArrayList sem repetições: " + lista2.toString()); } } Ao executar este código Java nós teremos o seguinte resultado: O conteúdo do ArrayList é: [Java, Scala, Ruby, Scala, Python, Ruby, Delphi] ArrayList sem repetições: [Java, Scala, Ruby, Python, Delphi] Note como a ordem dos elementos no ArrayList original foi respeitada. |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Java Básico |
Exercícios Resolvidos de Java - Escrever um algoritmo que recebe o salário-base de um funcionário, calcule e mostre o salário a receberQuantidade de visualizações: 9086 vezes |
Pergunta/Tarefa: Faça um programa (algoritmo) Java que recebe o salário-base de um funcionário, calcule e mostre o salário a receber, sabendo-se que esse funcionário tem gratificação de 5% sobre o salário-base e paga imposto de 7% sobre o salário-base. Sua saída deverá ser parecida com: Informe o salário base: 1450.00 Gratificação: R$ 72,50 Imposto: R$ 101,50 Salário final: R$ 1.421,00 Resposta/Solução: Veja a resolução comentada deste exercício usando Java console: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package estudos; import java.text.NumberFormat; import java.util.Scanner; public class Estudos { public static void main(String[] args) { // vamos fazer a leitura usando a classe Scanner Scanner entrada = new Scanner(System.in); // vamos ler o salario base System.out.print("Informe o salário base: "); double salario_base = Double.parseDouble(entrada.nextLine()); // vamos calcular a gratificação double gratificacao = salario_base * (5.0 / 100); // vamos calcular o imposto double imposto = salario_base * (7.0 / 100); // e finalmente calculamos o salário final double salario_final = salario_base + gratificacao - imposto; // e exibimos o resultado NumberFormat formato = NumberFormat.getCurrencyInstance(); System.out.println("Gratificação: " + formato.format(gratificacao)); System.out.println("Imposto: " + formato.format(imposto)); System.out.println("Salário final: " + formato.format(salario_final)); } } |
Java ::: Dicas & Truques ::: Gráficos |
Como desenhar em um JComponent (JLabel, JButton, JPanel, etc) usando o método getGraphics() para obter o contexto de desenhoQuantidade de visualizações: 13981 vezes |
A classe JComponent possui um método chamado getGraphics() que retorna um objeto da classe Graphics que pode ser usado para desenhar na superfície do componente. Desta forma, qualquer componente que herda de JComponent pode ser usado para esta finalidade. Antes de demonstrarmos como isso funciona, tenha em mente que o contexto de desenho de um componente só está disponível após ele ser pintado pela primeira vez. Se tentarmos obter o Graphics antes que o componente tenha sido pintado, corremos o risco de lançar uma exceção NullPointerException. O trecho de código abaixo mostra como desenhar uma linha em um JLabel ao clicar em um botão. Fique atento a este código. Boa parte das dicas vistas nesta seção usam esta abordagem: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Estudos extends JFrame{ JLabel label; public Estudos() { super("Desenhando em um JLabel"); Container c = getContentPane(); c.setLayout(new BorderLayout()); // Cria um JLabel label = new JLabel(); c.add(label, BorderLayout.CENTER); // Cria um botão JButton btn = new JButton("Desenhar uma linha"); btn.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ // Desenha uma linha no JLabel Graphics graphics = label.getGraphics(); graphics.drawLine(0, 0, 150, 100); } } ); // Adiciona o botão à janela c.add(btn, BorderLayout.SOUTH); setSize(350, 250); setVisible(true); } public static void main(String args[]){ Estudos app = new Estudos(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } Há algo de interessante neste código. Se você maximizar, minimizar ou redimensionar a janela verá que o desenho é apagado. Isso acontece porque todas as vezes que a janela sofre alguma alteração, ela é pintada novamente, juntamente com seus componentes filhos. Se você deseja que o desenho seja feito automaticamente novamente, é melhor fazer uma sub-classe do componente desejado e sobrescrever seu método paintComponent(). Nesta mesma seção você encontrará exemplos de como fazer isso. |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Exercício Resolvido de Java - Percorrer todos os elementos de um array, exibir a soma dos valores positivos e a quantidade de valores negativosQuantidade de visualizações: 12547 vezes |
Pergunta/Tarefa: Considere o seguinte vetor de inteiros: // um array de inteiros contendo sete elementos int valores[] = {-3, 9, 12, -34, -2, 20, 10}; Seu programa deverá exibir uma saída com a mensagem: A soma dos valores positivos é: 51 A quantidade de valores negativos é: 3 Resposta/Solução: Veja a resolução comentada deste exercício em Java: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- public static void main(String[] args){ // um array de inteiros contendo sete elementos int valores[] = {-3, 9, 12, -34, -2, 20, 10}; // o primeiro passo é criar uma variável que vai receber a soma // dos valores positivos int soma_positivos = 0; // agora uma variável para receber a quantidade de valores negativos int quant_negativos = 0; // agora vamos usar uma laço for para percorrer todos os elementos // do array for(int i = 0; i < valores.length; i++){ // vamos verificar se o valor do elemento atual é negativo if(valores[i] < 0){ quant_negativos++; } else{ // o valor é positivo soma_positivos = soma_positivos + valores[i]; } } // vamos exibir a soma dos valores positivos System.out.println("A soma dos valores positivos é: " + soma_positivos); // vamos exibir a quantidade de valores negativos System.out.println("A quantidade de valores negativos é: " + quant_negativos); } |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Exercícios Resolvidos de Java - Como retornar o primeiro elemento de um array em JavaQuantidade de visualizações: 550 vezes |
Pergunta/Tarefa: Escreva um programa Java que mostra como acessar e retornar o primeiro elemento de um array (vetor) Java. Sua saída deverá ser parecida com: Os elementos do vetor são: [9, 5, 3, 2, 4, 8] O primeiro elemento do array é: 9 Veja a resolução comentada deste exercício usando Java: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package estudos; import java.util.Arrays; public class Estudos { public static void main(String[] args) { // vamos criar um array de inteiros int valores[] = {9, 5, 3, 2, 4, 8}; System.out.println("Os elementos do vetor são: " + Arrays.toString(valores)); // agora vamos retornar o primeiro elemento do vetor int primeiro = valores[0]; // e mostramos o resultado System.out.println("O primeiro elemento do array é: " + primeiro); } } |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Exercícios Resolvidos de Java - Como testar se um array possui valores repetidos em JavaQuantidade de visualizações: 1872 vezes |
Pergunta/Tarefa: Escreva um programa Java que declara, constrói um vetor de 10 posições e pede ao usuário para informar os valores de seus elementos. Em seguida, varra o vetor e informe a existência ou não de valores repetidos. Sua saída deverá ser parecida com: Informe o valor para o índice 0: 3 Informe o valor para o índice 1: 6 Informe o valor para o índice 2: 8 Informe o valor para o índice 3: 10 Informe o valor para o índice 4: 2 Informe o valor para o índice 5: 4 Informe o valor para o índice 6: 6 Informe o valor para o índice 7: 10 Informe o valor para o índice 8: 3 Informe o valor para o índice 9: 30 Há valores repetidos no vetor Veja a resolução comentada deste exercício usando Java: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package estudos; import java.util.Scanner; public class Estudos { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); // vamos declarar e construir um vetor de 10 elementos int valores[] = new int[10]; // vamos pedir que o usuário informe os valores for(int i = 0; i < valores.length; i++){ System.out.print("Informe o valor para o índice " + i + ": "); valores[i] = Integer.parseInt(entrada.nextLine()); } // agora vamos verificar se o vetor possui valores repetidos boolean repetidos = false; // percorremos todos os elementos do vetor for(int i = 0; i < valores.length; i++){ // para cada elemento em i nos verificamos os que estão nos indices seguintes for(int j = i + 1; j < valores.length; j++){ // encontramos algum repetido? if(valores[j] == valores[i]){ repetidos = true; break; // saímos do laço } } } if(repetidos){ System.out.println("Há valores repetidos no vetor"); } else{ System.out.println("Nao há valores repetidos no vetor"); } System.out.println("\n"); } } |
Java ::: Coleções (Collections) ::: Vector |
Java Collections - Como remover um determinado elemento de um Vector baseado em seu valorQuantidade de visualizações: 11806 vezes |
Muitas vezes precisamos excluir um determinado elemento de um Vector baseado em seu valor. Isso pode ser feito com o método remove(). Veja sua assinatura:public boolean remove(Object o) ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- import java.util.*; public class Estudos{ public static void main(String args[]){ // Cria o Vector Vector<String> nomes = new Vector<String>(); // adiciona itens ao Vector nomes.addElement("Osmar"); nomes.addElement("Marcos"); nomes.addElement("Ingrid"); // vamos exibir os elementos for(String nome : nomes) System.out.println(nome); // vamos excluir o elemento "Ingrid" boolean sucesso = nomes.remove("Ingrid"); if(sucesso) System.out.println("\nO elemento foi removido " + "com sucesso.\n"); else System.out.println("\nO elemento NAO foi removido " + "com sucesso.\n"); // vamos exibir os elementos novamente for(String nome : nomes) System.out.println(nome); } } Ao executar este exemplo nós teremos o seguinte resultado: Osmar Marcos Ingrid O elemento foi removido com sucesso. Osmar Marcos |
Java ::: Dicas & Truques ::: Data e Hora |
Como retornar a diferença de meses entre duas datas em Java - Datas e horas em JavaQuantidade de visualizações: 9272 vezes |
O trecho de código abaixo mostra como obter a diferença de meses entre dois objetos Date. Estude-o atentamente. Esta é uma técnica muito útil para programadores que lidam com cálculos de datas em suas aplicações:---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- package arquivodecodigos; import java.util.*; import java.text.*; public class Estudos{ public static void main(String args[]){ try{ // constrói a primeira data DateFormat fm = new SimpleDateFormat( "dd/MM/yyyy"); Date data1 = (Date)fm.parse("20/10/2008"); // constrói a segunda data fm = new SimpleDateFormat("dd/MM/yyyy"); Date data2 = (Date)fm.parse("30/12/2008"); // vamos obter a diferença de meses long segundos = (data2.getTime() - data1.getTime()) / 1000; int meses = (int)Math.floor(segundos / 2592000); segundos -= meses * 2592000; int dias = (int)Math.floor(segundos / 86400); // exibe o resultado System.out.println("As duas datas tem " + meses + " meses e " + dias + " dias de diferença"); } catch(ParseException e){ e.printStackTrace(); } } } Ao executar este código Java nós teremos o seguinte resultado: As duas datas tem 2 meses e 11 dias de diferença |
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |