Giter VIP home page Giter VIP logo

cami-la / collections-java-api-2023 Goto Github PK

View Code? Open in Web Editor NEW
934.0 5.0 699.0 1.8 MB

Este repositório é referente ao curso "Collection Framework API Java" e é uma valiosa contribuição para a comunidade de desenvolvedores Java, fornecendo exemplos práticos e recursos educacionais relacionados à poderosa API de coleções da linguagem Java.

Home Page: https://web.dio.me/course/conhecendo-collections-java/learning/c5d6f4e1-6d05-4eea-93d8-d292c708999f

Java 100.00%
collections java17

collections-java-api-2023's People

Contributors

cami-la avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

collections-java-api-2023's Issues

Clean Code

Boa tarde, Camila. Tudo bem?

Uma dúvida na implementação do seu código abaixo:

public void removerConvidadoPorCodigoConvite(int codigoConvite) {
        Convidado convidadeRemovido = null;
        if (!convidadoSet.isEmpty()) {
            for (Convidado c : convidadoSet) {
                if (c.getCodigoConvite() == codigoConvite) {
                    convidadeRemovido = c;
                    break;
                    convidadoSet.remove(convidadeRemovido);
                } else {
                    throw new RuntimeException("Conjunto vazio");
                }
            }
        }
}

No quesito clean code (que ouço é bem importante), teria problema em implementar o código desta forma?

public void removerConvidadoPorCodigoConvite(int codigoConvite) {
        if (!convidadoSet.isEmpty()) {
            for (Convidado c : convidadoSet) {
                if (c.getCodigoConvite() == codigoConvite) {
                    convidadoSet.remove(c);
                    break;
                }
            }
        } else {
            throw new RuntimeException("Lista vazia");
        }
}

*Sem a necessidade de ter criado uma variável do tipo Convidado, e remover direto pelo conjunto.

Desde já, muito obrigado!

Estou com esse erro na syntax

package list;

import java.util.ArrayList;
import java.util.List;

public class ListaTarefa {
private List tarefaList;

public ListaTarefa() {
	this.tarefaList = new ArrayList<>();

}

public void adicionarTarefa(String descricao) {
	tarefaList.add(new Tarefa(descricao));
} 

public void removerTarefa(String descricao) {
	// criando lista vazia	
	List<Tarefa> tarefasParaRemover = new ArrayList<>();
	// T é igual tarefa list criado em cima
	// se tarefa t for igual a descricao ele vai remover		
	for(Tarefa t : tarefaList) {
		if(t.getDescricao().equalsIgnoreCase(descricao)) {
			tarefasParaRemover.add(t);
		}
	}
	tarefaList.removeAll(tarefasParaRemover);	
}
public int obterNumeroTotalTarefas() {
	return tarefaList.size();
	// size = metodo que vai retorna inteiro e mostra a quantidade de item na list		
}
public void obterDescricaoTarefas() {
	System.out.print(tarefaList);
}

public static void main (String[] args) {
	ListaTarefa listaTarefa = new ListaTarefa();
	System.out.println(" O numero total de tarefa é:" + listaTarefa.obterNumeroTotalTarefas());
	
	listaTarefa.adicionarTarefa(descricao: "tarefa1");
	System.out.println(" O numero total de tarefa é:" + listaTarefa.obterNumeroTotalTarefas());
}

}

~~ estou com esse problema, dando erro na syntax ~~
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Syntax error on token ":", invalid AssignmentOperator

at collectionsJavaApi2023/list.ListaTarefa.main(ListaTarefa.java:42)

Erro ao fazer o cast do elemento - GenericsExempleList

Ao rodar o exemplo da classe GenericsExempleList, a IDE apontou uma exception ao fazer o cast do valor do elemento do tipo "Int" para o tipo String, lançando a ClassCastException. Neste caso, eu poderia ao invés de fazer o cast, eu poderia chamar o método toString() ? Ou dependendo do tipo poderia gerar o mesmo erro ?

Screenshot from 2024-05-01 17-04-43

Duvida quanto a o que realmente está acontecendo no exemplo pesquisa por titulo

Olá Camila, estou realizando o seu curso e estudando aqui e gostaria se possível de uma melhor explicação do que está acontecendo na linha abaixo:
https://github.com/cami-la/collections-java-api-2023/blob/cf51d96e0b6376493b6b19d85390914f25ba2965/src/main/java/list/Pesquisa/CatalogoLivros.java#L51C1-L51C30

O que está acontecendo é a cópia do objeto ou a indicação de um ponteiro? Pesquisei um pouco e não tive boas conclusões.
Desde já agradecido.

Map

Hi Camila!

So, on the exercise of comparation about the most espensive product of movie A4V5, you build the method to get return, and u use the Double.MIN.VALUE, but don't update the variable inside of the loop and it runs correctlly , can u explain me?

Então no exercício de comparação de produto mais caro da A4V5, quando voce monta o metodo de pegar o produto mais caro, você usa o Double.MIN.VALUE, mas não atualiza a variável dentro do laço de repetição e mesmo assim o metodo funciona corretamente , pode me explicar o porque?

` public Produto ProdutoMaisCaro() {

    Produto produtoMaisCaro = null;
    double maiorPreco = Double.MIN_VALUE;

    if (!estoqueProdutoMap.isEmpty()) {

        for (Produto p : estoqueProdutoMap.values()) {

            if (p.getPreco() > maiorPreco)
                produtoMaisCaro = p;
                                         ******  maiorPreco, woudn't be here? like maiorPreco = p.getPreco() ??  ******

        }
    }

    return produtoMaisCaro;
}`

[Correção] Readme.md

Gostaria de sugerir a correção do readme do src/main/java/generics onde coloca as sintexes "public class Box" em Code, para assim aparecer o <T> ao final.

correção:
Para atualizar a classe Box para usar generics, você cria uma declaração de tipo genérico alterando o código public class Box para public class Box<T>.

Duvida ou sugestão - Exercícios por fazer

Olá @cami-la! Estou fazendo o curso de Collections e eu fiquei com vontade de fazer o Hands On acompanhando nos seus vídeos, pensei em deletar algumas classes mas fiquei na dúvida se devo retirar tudo de cada pacote ou não.

Pensei em fazer um git checkout pros primeiros commits do repositório, mas também não queria desfazer dos README.md que você fez alteração.

Acho que talvez seja interessante ter uma branch nova com os exercícios todos por fazer, para caso os alunos quiserem te acompanhar em vídeo. Mas é só uma sugestão.

Do contrário, você poderia me dizer quais classes devo deletar para refazer tudo acompanhando a vídeo aula?

Duvida implementacao metodo obterProdutoMaiorQuantidadeValorTotalNoEstoque

"Retorna o produto que está em maior quantidade no estoque, considerando o valor total de cada produto (quantidade * preço)." No caso eu deveria retornar o produto que tem maior valor total e maior quantidade ou o contrario? exemplo: Produto A {preco:10,qtd:1} Produto B {preco 1,qtd:10} logo o algoritimo deveria retornar B pois além dele ter o maior total tambem tem a maior quantidade. Sua implementação esta diferente

Otimização no método obterProximoEvento da classe AgendaEventos

Código apresentado

public void obterProximoEvento() {
    /*Set<LocalDate> dateSet = eventosMap.keySet();
    Collection<Evento> values = eventosMap.values();*/
    //eventosMap.get();
    LocalDate dataAtual = LocalDate.now();
    LocalDate proximaData = null;
    Evento proximoEvento = null;
    Map<LocalDate, Evento> eventosTreeMap = new TreeMap<>(eventosMap);
    for (Map.Entry<LocalDate, Evento> entry : eventosTreeMap.entrySet()) {
      if (entry.getKey().isEqual(dataAtual) || entry.getKey().isAfter(dataAtual)) {
        proximaData = entry.getKey();
        proximoEvento = entry.getValue();
        System.out.println("O próximo evento: " + proximoEvento + " acontecerá na data " + proximaData);
        break;
      }
    }
  }

É um código funcional,que cumpre sua função declarada,obter um próximo evento dado uma data atual,como o código tem como objetivo imprimir apenas 1 vez o próximo evento podemos omitir a declaração das variáveis proximaData e proximoEvento pois já está claro que o método irá apresentar o próximo evento,que consequentemente possui uma data,segue abaixo uma sugestão de otimização:

	public void obterProximoEvento() {
		
	LocalDate dataAtual = LocalDate.now();
		
        Map<LocalDate, Evento> eventosTreeMap = new TreeMap<>(eventosMap);
	for(Entry<LocalDate,Evento> e : eventosTreeMap.entrySet()) {
			
		if(e.getKey().equals(dataAtual)||e.getKey().isAfter(dataAtual)) {
			 System.out.println("O próximo evento: " + e.getValue() + " acontecerá na data " +e.getKey() ); 
				break;
			}
		}

	}

OBS:É apenas uma sugestão vindo de um estudante que gosta muito de programar

Duvida no exercício Produto Estoque - Pesquisa Map

Ola Camila tudo bem?
Eu não entendi direto esse método, principalemte no for (Map.Entry<Long, Produto> entry : estoqueProdutosMap.entrySet()) .
Poderia me ajudar por gentileza.

public Produto obterProdutoMaiorQuantidadeValorTotalNoEstoque() {
Produto produtoMaiorQuantidadeValorNoEstoque = null;
double maiorValorTotalProdutoEstoque = 0d;
if (!estoqueProdutosMap.isEmpty()) {
for (Map.Entry<Long, Produto> entry : estoqueProdutosMap.entrySet()) {
double valorProdutoEmEstoque = entry.getValue().getPreco() * entry.getValue().getQuantidade();
if (valorProdutoEmEstoque > maiorValorTotalProdutoEstoque) {
maiorValorTotalProdutoEstoque = valorProdutoEmEstoque;
produtoMaiorQuantidadeValorNoEstoque = entry.getValue();
}
}
}
return produtoMaiorQuantidadeValorNoEstoque;
}

Exercício Conjunto Convidados

Olá Cami, não sei o que estou fazendo errado, talvez seja algo simples que não vi. Mas no momento da remoção, todos os convidados com mesmo código estão sendo removidos. Pensei que fosse algo com break.

package set.OperacoesBasicas;

import java.util.HashSet;
import java.util.Set;

public class ConjuntoConvidados {
    //Atributos
    private Set<Convidado> convidadosSet;

    public ConjuntoConvidados() {
        this.convidadosSet = new HashSet<>();
    }

    public void adicionarConvidado(String nome, int codigoConvite) {
        convidadosSet.add(new Convidado(nome, codigoConvite));
    }

    public void removerConvidadoPorCodigoConvite(int codigoConvite) {
        Convidado convidadoParaRemover = null;
        if(!convidadosSet.isEmpty()) {
            for (Convidado c : convidadosSet) {
                if (c.getCodigoConvite() == codigoConvite) {
                    convidadoParaRemover = c;
                    break;
                }
                
            }
            convidadosSet.remove(convidadoParaRemover);
        } else {
            throw new RuntimeException("O conjunto esta vazio");
        }
    }

    public int contarConvidados() {
        return convidadosSet.size();
    }

    public void exibirConvidados() {
        if(!convidadosSet.isEmpty()) {
            System.out.println(convidadosSet);
        } else {
            System.out.println("O conjunto está vazio");
        }
    }

    public static void main(String[] args) {
        //Criando uma instancia da classe ConjuntoConvidados
        ConjuntoConvidados conjuntoConvidados = new ConjuntoConvidados();

        //Exibindo o numero de convidados no conjunto (deve ser zero)
        System.out.println("Existem " + conjuntoConvidados.contarConvidados());

        //adicionando convidados
        conjuntoConvidados.adicionarConvidado("Hayane", 1234);
        conjuntoConvidados.adicionarConvidado("Rafael", 1235);
        conjuntoConvidados.adicionarConvidado("Sabrina", 1236);
        conjuntoConvidados.adicionarConvidado("Carol", 1237);
        conjuntoConvidados.adicionarConvidado("Bia", 1236);
        conjuntoConvidados.adicionarConvidado("Ana", 1237);

        System.out.println("Convidados no conjunto:");
        conjuntoConvidados.exibirConvidados();

        System.out.println("Existem " + conjuntoConvidados.contarConvidados() + " convidado(s) dentro do Set de Convidados");

        conjuntoConvidados.removerConvidadoPorCodigoConvite(1236);

        System.out.println("Convidados no conjunto após a remoção:");
        conjuntoConvidados.exibirConvidados();
    }

}

Pode me ajudar?

Cami estou adorando seu curso, vim só pedir o nome do thema que tá usando no Intellij amei o padrão de cores.

Duvida sobre implementação classe Compare

Olá Camila espero que esteja bem!

Bom, fiquei com dúvida em relação a implementação da classe Comparator no exercício de Ordenar pessoas por alturas, por ela se tratar de uma interface eu poderia estar implementando ela já na classe Pessoa juntamente com a classe Comparable?
ficando o codigo desse modo:

public class Pessoa implements Comparable, Comparator{

}

A necessidade de criar outra classe está ligado ao fato que ele oferece multiplas sequencias de ordenação e então dentro dessa classe que o implementa podemos definir aas múltiplas sequencias?

Método removeItem remove todos os itens.

Oi Cami! Tudo bom? Java parece muito complicada ;)
Aqui tenho problem acom metodo removeItem:
`import java.util.ArrayList;
import java.util.List;

public class ShoppingCart {
private List shoppingList;

public ShoppingCart() {
    this.shoppingList = new ArrayList<>();
}

public void addItem(String name, double price, int quantity) {
    shoppingList.add(new Item(name, price, quantity));
}

public void removeItem(String name) {
    List<Item> itemToRemove = new ArrayList<>();
    for (Item i : shoppingList) {
        if (i.getName().equalsIgnoreCase(name))
            ;
        {
            itemToRemove.add(i);
        }
    }
    shoppingList.removeAll(itemToRemove);
}

public double calculateTotalValue() {
    double totalValue = 0d;
    if (!shoppingList.isEmpty()) {
        for (Item item : shoppingList) {
            double itemValue = item.getPrice() * item.getQuantity();
            totalValue += itemValue; 
        }
        return totalValue;
    } else {
        throw new RuntimeException("A lista está vazia!");
    }
}



public void showItems() {
    System.out.println(shoppingList);
}

public static void main(String[] args) throws Exception {
    ShoppingCart shopCart = new ShoppingCart();
    shopCart.addItem("eggs", 2.99, 3);
    shopCart.addItem("apple", 4.20, 2);
    shopCart.addItem("banana", 5.76, 1);
    shopCart.showItems();
    shopCart.removeItem("eggs");
    System.out.println("Total value  = " + shopCart.calculateTotalValue());
    
}

}`
Item.java:

`public class Item {
private String name;
private double price;
private int quantity;

public Item(String name, double price, int quantity) {
    this.name = name;
    this.price = price;
    this.quantity = quantity;
}

String getName() {
    return name;
}

double getPrice() {
    return price;
}

int getQuantity() {
    return quantity;
}
@Override
public String toString() {
    return "Item{" +
            "name='" + name +
            ", price=" + price +
            ", quantity=" + quantity +
            '}';
}

}`

Variável não semântica

Embora seja uma alteração mínima, vale a pena manter a coerência semântica na criação de variáveis, sendo assim percebi inconsistência ao verificar a resolução de um desafio e resolvi contribuir.

Criando issue para vincular ao PR.

Problema com o Integer do Java Lang na solução proposta em SomaNumeros

Olá Camila tudo bem?

Poderia dar uma olhada na minha solução fiz os 2 metodos pra achar o maior e menor numero da lista e deu erro, ai tentei fazer igual a sua solução e não consegui devido a um erro com o Integer do Java Lang.

Busquei algumas tentativas de solução tentando transformar o numero em String e não deu certo.

Segue minha solução se puder me ajudar, obrigado

https://github.com/douglasmfe-lab/collections-java-api-2023/blob/main/src/main/Pesquisa/SomaNumeros.java

Pacote e sub-pacote

Olá Cami, tudo bem?
Pode parecer ridículo, mas estou com dificuldades em organizar pacotes e sub-pacotes. Poderia me ajudar?
Olha como o meu esta:
Pacotes-intellij

Uso das interfaces Comparable e Comparator

Você cometeu um equivoco no README em relação ao uso da interface Comparable, ao dizer que na implementação da interface so se pode usar um atributo da classe.
Ao implementar a interface Comparable posso usar mais de um atributo da classe para ordenação, tudo vai depende dos requisitos da classe.
Exemplo:
Em um sistema para uma concessionária, no requisito do sistema foi definido a class Carro { private String marca; private String modelo; private int ano; }, e que ordenação padrão (natural) da mesma é pela marca, modelo e ano (nessa ordem).
Então posso implementa-lá da seguinte forma:

public class Carro implements Comparable<Carro>{
  private String marca; 
  private String modelo;  
  private int ano;

  public int compareTo(Carro c) {

    int compare = marca.compareTo(c.marca);
    if(compare == 0) {
      compare = modelo.compareTo(c.modelo);
      if(compare == 0) {
        int dif = ano - c.ano;
        if(dif == 0)
          return 0;

        compare = dif / Math.abs(dif);
      }
    }

    return compare;
  }
}

Erro no método pesquisarPorAutor

Olá, prof Camila

No meu método de pesquisar por autor (pesquisaPorAutor()), no módulo Conhecendo Collections Java -> aula - List -> Pesquisa List. Fiz a implementação do método pesquisaPorAutor(), conforme mostrado na aula. Porém nos testes o sistema ignorou a pesquisa por autor trazendo todo os elementos da lista. Mesmo passando um valor que não estava na lista trazia alista completa. Esse comportamento ocorreu apenas neste métodos, os demais métodos por período de tempo e título funcionaram corretamente.

##Teste aplicado:
`package list.Pesquisa;

import java.util.ArrayList;
import java.util.List;

public class CatalagoLivros {

private List<Livro> livroList;

public CatalagoLivros(){
    this.livroList = new ArrayList<>();
}

public void adicionarLivro(String titulo, String autor, int anoPublicacao){
    livroList.add(new Livro(titulo, autor, anoPublicacao));
}

public List<Livro> pesquisarPorAutor(String autor){
    List<Livro> livrosPorAutor = new ArrayList<>();
    if(!livroList.isEmpty()){
        for (Livro l : livroList){
            if(l.getAutor().equalsIgnoreCase(autor));{
                livrosPorAutor.add(l);
            }
        }
    }

    return livrosPorAutor;
}

public List<Livro> pesquisarPorIntervaloAno(int anoIncial, int anoFinal){
    List<Livro> livrosPorIntervaloAnos = new ArrayList<>();
    if (!livroList.isEmpty()){
        for (Livro l : livroList){
            if (l.getAnoPublicacao() >= anoIncial && l.getAnoPublicacao() <= anoFinal){
                livrosPorIntervaloAnos.add(l);
            }
        }
    }

    return livrosPorIntervaloAnos;
}

public Livro pesquisarPorTitulo(String titulo){
    Livro livroPorTitulo = null;
    if (!livroList.isEmpty()){
        for (Livro l : livroList){
            if (l.getTitulo().equalsIgnoreCase(titulo)){
                livroPorTitulo = l;
                break;
            }else{
                System.out.println("Esse título não foi encontrado na lista de livros");
                break;
            }
        }
    }

    return livroPorTitulo;
}

public static void main(String[] args) {
    CatalagoLivros catalagoLivros = new CatalagoLivros();
    catalagoLivros.adicionarLivro("Livro 1", "Autor 1", 2020);
    catalagoLivros.adicionarLivro("Livro 2", "Autor 2", 2023);
    catalagoLivros.adicionarLivro("Livro 1", "Autor 1", 2020);
    catalagoLivros.adicionarLivro("Livro 3", "Autor 3", 2024);
    catalagoLivros.adicionarLivro("Livro 4", "Autor 4", 2019);

    System.out.println(catalagoLivros.pesquisarPorAutor("Autor 1"));
    System.out.println(catalagoLivros.pesquisarPorTitulo("Livro 1"));
    System.out.println(catalagoLivros.pesquisarPorIntervaloAno(2019, 2021));

}

}

##Resultado do teste:
"C:\Program Files\Java\jdk-17\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2024.1\lib\idea_rt.jar=49964:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2024.1\bin" -Dfile.encoding=UTF-8 -classpath D:\workspace\collections-java\ConhecendoCollectionsJava\out\production\ConhecendoCollectionsJava list.Pesquisa.CatalagoLivros [Livro{titulo=' Livro 1', autor=' Autor 1', anoPublicacao= 2020}, Livro{titulo=' Livro 2', autor=' Autor 2', anoPublicacao= 2023}, Livro{titulo=' Livro 1', autor=' Autor 1', anoPublicacao= 2020}, Livro{titulo=' Livro 3', autor=' Autor 3', anoPublicacao= 2024}, Livro{titulo=' Livro 4', autor=' Autor 4', anoPublicacao= 2019}] Livro{titulo=' Livro 1', autor=' Autor 1', anoPublicacao= 2020} [Livro{titulo=' Livro 1', autor=' Autor 1', anoPublicacao= 2020}, Livro{titulo=' Livro 1', autor=' Autor 1', anoPublicacao= 2020}, Livro{titulo=' Livro 4', autor=' Autor 4', anoPublicacao= 2019}] Process finished with exit code 0

##Versão do Java:
`C:\Users\Soyo>java --version
java 17.0.9 2023-10-17 LTS
Java(TM) SE Runtime Environment (build 17.0.9+11-LTS-201)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.9+11-LTS-201, mixed mode, sharing)

C:\Users\Soyo>`

##A versão da IDE
versao_intellij

interface ou class?

Esse conceito ainda não ficou bem claro pra mim, mas quando eu uso interface e quando eu uso classe?

Map Ordenação LivrariaOnline - exibirLivrosOrdenadosPorPreco(),

Boa tarde! Camila!

Fazendo os exercicios de Map e nalisando o retorno do metodo exibirLivrosOrdenadosPorPreco(), me parece que esse metodo não esta ordenando corretamente, mesmo usando o Comparable, ou Comparator que também da o mesmo resultado?.

Baixei suas classes e deu o mesmo resultado, pra mim o retorno não esta correto!

Dei um pesquisada e vi alguns exemplos para fazer essa ordenação, mas achei muito complexos!
Pode verficar por favor e dar um retorno?

Vou continuar pesquisando aqui uma forma mais simples de fazer isso!

Obrigado!!

ReadMe do SET apresenta um erro

No desafio da Lista de tarefa foi passado como argumento do tipo "Tarefa" nos metodos: "removerTarefa", "marcarTarefaConcluida" e "marcarTarefaPendente". Ao comparar com o código pronto percebi que no lugar foi utilizado o String "descricao".

Duvida - MAP

public void removerLivro(String titulo) {
Livro livroRemovido = null;
if (!livros.isEmpty()) {
for (Map.Entry<String, Livro> entry : livros.entrySet()) {
if (entry.getValue().getTitulo().equals(titulo)) {
livroRemovido = entry.getValue();
break;
}
}
} else {
throw new RuntimeException("Não existem livros!!");
}
if (livroRemovido != null) {
livros.remove(livroRemovido);
}

}

OBS: o método não está excluindo, não estou achando outra maneira dentro deste método!!!

LivrariaOnline

Boa noite, Camila. Tudo bem?
Estou tentando fazer o desafio da LivrariaOnline, mas travei em uma parte.

issue_LivrariaOnline

Mesmo criando um Comparator utilizando Map.Entry:

class ComparatorPorPreco implements Comparator<Map.Entry<String, Livro>> {
    @Override
    public int compare(Map.Entry<String, Livro> l1, Map.Entry<String, Livro> l2) {
        return Double.compare(l1.getValue().getPreco(), l2.getValue().getPreco());
    }
}

Achei que funcionaria passando como parâmetro, conforme imagem acima, mas está dando erro.
Olhando a sua resposta, você utilizou List + Collection.sort(), para fazer a ordenação.

Mas a minha dúvida é, não tem como utilizar o Comparator dentro do TreeMap diretamente? Ou só dessa forma mesmo que você fez?

Obrigado.

Plugins

Ola Camila!!

E meio fora do contexto, mas pode passar os plugins q usa no IntelliJ?

Desafio de ordenação com Map

Oi tudo bem, realizando o desfio de ordenação do com Map me deparei com um erro na hora de executar o método de remover livro, essa foi a solução que consegui chegar, em vez de criar uma variável do obj Livro, troquei para uma String, e em vez de passar o .getValue() passo o .getKey(), pois a IDE acabou dando um alerta dizendo que não conseguia encontra a key para realizar a remoção

Codigo que não funcionou:

image

Codigo funcionou e removeu :

image

Desafio Lista Tarefas (SET)

Boa tarde @cami-la, poderia analisar o meu código abaixo e apontar melhorias ou falhas?

Tentei fazer sem consulta ao seu código e cheguei nesse que vou anexar aqui. Após finalizar, efetue um depara com o teu e vi que tem algumas diferenças, porém, fiz os cenários de testes e passou em todos.

package set.pesquisaemset.listatarefas;

import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

public class ListaTarefas {
    // Atributo para armazenar as tarefas em um conjunto (Set).
    private Set<Tarefa> tarefasSet;

    // Construtor da classe ListaTarefas, inicializa o conjunto de tarefas como um HashSet vazio.
    public ListaTarefas() {
        this.tarefasSet = new HashSet<>();
    }

    // Método para adicionar uma tarefa ao conjunto.
    public void adicionarTarefa(String descricao){
        tarefasSet.add(new Tarefa(descricao, false));
    }

    // Método para remover uma tarefa do conjunto com base na descrição.
    public void removerTarefa(String descricao){
        Tarefa tarefaParaRemover = null;
        if (!tarefasSet.isEmpty()){
            // Itera sobre as tarefas para encontrar a que corresponde à descrição fornecida.
            for (Tarefa t: tarefasSet){
                if (t.getDescricao().equalsIgnoreCase(descricao)){
                    tarefaParaRemover = t;
                    break;
                }
            }
            // Remove a tarefa se encontrada, caso contrário, exibe uma mensagem de erro.
            if (tarefaParaRemover != null) {
                tarefasSet.remove(tarefaParaRemover);
            } else {
                System.out.println("Tarefa inexistente.".toUpperCase());
            }
        }else {
            System.out.println("A lista está vazia.".toUpperCase());
        }
    }

    // Método para exibir todas as tarefas no conjunto.
    public void exibirTarefas(){
        if (!tarefasSet.isEmpty()){
            System.out.println(tarefasSet);
        }else {
            System.out.println("A lista está vazia".toUpperCase());
        }
    }

    // Método para contar o número de tarefas no conjunto.
    public int contarTarefas(){
        int totalTarefas = 0;
        if (!tarefasSet.isEmpty()){
            totalTarefas = tarefasSet.size();
        }else {
            System.out.println("A lista está vazia.".toUpperCase());
        }
        return totalTarefas;
    }

    // Método para obter um conjunto de tarefas concluídas.
    public Set<Tarefa> obterTarefasConcluidas(){
        Set<Tarefa> tarefasConcluidas = new HashSet<>();
        if (!tarefasSet.isEmpty()){
            // Itera sobre as tarefas para encontrar as concluídas e adicioná-las ao conjunto.
            for (Tarefa t: tarefasSet){
                if (t.isConcluida()){
                    tarefasConcluidas.add(t);
                }
            }
            return tarefasConcluidas;
        }else {
            throw new RuntimeException("A lista está vazia".toUpperCase());
        }
    }

    // Método para obter um conjunto de tarefas pendentes.
    public Set<Tarefa> obterTarefasPendentes(){
        Set<Tarefa> tarefasPendentes = new HashSet<>();
        if (!tarefasSet.isEmpty()){
            // Itera sobre as tarefas para encontrar as pendentes e adicioná-las ao conjunto.
            for (Tarefa t: tarefasSet){
                if (!t.isConcluida()){
                    tarefasPendentes.add(t);
                }
            }
            return tarefasPendentes;
        }else {
            throw new RuntimeException("A lista está vazia.".toUpperCase());
        }
    }

    // Método para marcar uma tarefa como concluída com base na descrição.
    public void marcarTarefaConcluida(String descricao){
        if (!tarefasSet.isEmpty()){
            // Itera sobre as tarefas para encontrar a que corresponde à descrição fornecida e a
            // marca como concluída.
            for (Tarefa t: tarefasSet){
                if (t.getDescricao().equalsIgnoreCase(descricao)){
                    t.setConcluida(true);
                }
            }
        }else {
            System.out.println("Tarefa inexistente.".toUpperCase());
        }
    }

    // Método para marcar uma tarefa como pendente com base na descrição.
    public void marcarTarefaPendente(String descricao){
        if (!tarefasSet.isEmpty()){
            // Itera sobre as tarefas para encontrar a que corresponde à descrição fornecida e a
            // marca como pendente.
            for (Tarefa t: tarefasSet){
                if (t.getDescricao().equalsIgnoreCase(descricao)){
                    t.setConcluida(false);
                    break;
                }
            }
        }else {
            System.out.println("Tarefa inexistente.".toUpperCase());
        }
    }

    // Método para limpar o conjunto de tarefas, tornando-o vazio.
    public void limparListaTarefas(){
        if (!tarefasSet.isEmpty()){
            System.out.println("A lista está vazia.".toUpperCase());
        }else tarefasSet.clear();
    }
}

Se puder analisar e me mostrar onde posso melhorar, ficarei grato.

Abraços.

Collections Map

Oi Cami, preciso de uma ajuda.
Não consegui entender muito bem o Map, tanto que não consegui resolver o exercício da Livraria Online.
Tem indicação de algum material que eu possa ver ??
Quando começou com Map, entry, e outras coisas me perdi rsrs.

Exemplo de Generics Set

Boa tarde @cami-la ,

segue abaixo o código utilizando o Set que você forneceu:

package main.java.generics;

import java.util.HashSet;
import java.util.Set;

public class GenericsExempleSet {
	public static void main(String[] args) {
		// Exemplo sem Generics
		Set conjuntoSemGenerics = new HashSet();
		conjuntoSemGenerics.add("Elemento 1");
		conjuntoSemGenerics.add(10); // Permite adicionar qualquer tipo de objeto

		// Exemplo com Generics
		Set<String> conjuntoGenerics = new HashSet<>();
		conjuntoGenerics.add("Elemento 1");
		conjuntoGenerics.add("Elemento 2");

		// Iterando sobre o conjunto com Generics
		for (String elemento : conjuntoGenerics) {
			System.out.println(elemento);
		}

		// Iterando sobre o conjunto sem Generics (necessário fazer cast)
		for (Object elemento : conjuntoSemGenerics) {
			String str = (String) elemento;
			System.out.println(str);
		}
	}
}

este código exibe um erro no IntelliJ:

image

Código que alterei para poder corrigir os erros:

package generics;

import java.util.HashSet;
import java.util.Set;
    public class GenericsExempleSet {
        public static void main(String[] args) {
            // Exemplo sem Generics
            Set<Object> conjuntoSemGenerics = new HashSet<>();
            conjuntoSemGenerics.add("Elemento 1");
            conjuntoSemGenerics.add(10); // Permite adicionar qualquer tipo de objeto

            // Exemplo com Generics
            Set<String> conjuntoGenerics = new HashSet<>();
            conjuntoGenerics.add("Elemento 1");
            conjuntoGenerics.add("Elemento 2");

            // Iterando sobre o conjunto de Generics do tipo String
            System.out.println("TIPO STRING");
            for (String elemento : conjuntoGenerics) {
                System.out.println(elemento);
            }

            System.out.println();

            // Iterando sobre o conjunto de Generics de qualquer tipo (sem uso de cast)
            System.out.println("TIPO GENÉRICO");
            for (Object elemento : conjuntoSemGenerics) {
                System.out.println(elemento);
            }
        }
    }

Poderia me informar o porque usando o código que você forneceu não roda diretamente sem estas alterações

Erro Intellij

O metodo equalsIgnoreCase não aparece na classe CarrinhoDeCompras no Intellij , diferente na classe ListaTarefa a IDE esta trazendo normalmente. O que pode ser? Pode me ajudar ? Grato

Agenda de contatos

Oi Camila, tudo bem?

Na agenda de contatos eu gostaria de tirar uma dúvida, o equals() and hashCode() não seria no telefone, pois em uma agenda o nome pode ser igual, podemos ter 2 Marias por exemplo, mas o número do telefone nunca se repete, cada pessoa tem o seu telefone (celular).

Obrigado!
Douglas

Tema intellij

Boa noite!
Qual é o tema que você utiliza no seu intellij? acho bem legal e didático.

Set - Ordenacao - GerenciadorAluno

Bom dia Camila! Parabéns pelo material e pela didática.
Na tarefa Lista de Alunos tem como parte da tarefa a implementação do método exibirAlunos() mas quando vi no teu código não encontrei lá. Eu havia implementado da seguinte forma no meu código antes de comparar com o teu.

public void exibirAlunos() {
Set setAlunos = new TreeSet<>(alunoSet);
if(!alunoSet.isEmpty()) {
System.out.println(setAlunos);
} else {
System.out.println("O conjunto está vazio!");
}
}

Funcionou como esperado, espero que seja útil para outros tmb. Abraço

Problema de compilação

Olá! Segui todos os passos da aula "Operações Básicas List". Porém, ao tentar executar, para criar a lista ListaTarefas, o VS Code apresentou o erro "O valor da variável local listaTarefa não é usado".

Correção README.md

Correção da palavra "precisão" para "precisam".

  • Uma coleção (collection) é uma estrutura de dados que serve para agrupar muitos elementos em uma única unidade, estes elementos precisão precisam ser Objetos.

Pesquisa Map - obterProdutoMaisCaro()

Olá, professora Camila. Tudo bem?

Eu estava tendo um problema nos testes do método obterProdutoMaisCaro(), sempre retorna o último produto instanciado, independente do valor. Comparei meu código com o seu e a implementação do método estava correta.

Copiei o seu método main e funcionou. Mas observei que o último produto é o mais caro:
estoque.adicionarProduto(1L, "Produto A", 1, 5.0);
estoque.adicionarProduto(2L, "Produto B", 5, 11.0);
estoque.adicionarProduto(3L, "Produto C", 3, 15.0);
estoque.adicionarProduto(8L, "Produto D", 2, 23.0);

Sendo assim, eu coloquei o valor mais alto no Produto A, 50.0; mas o retorno no terminal continua o Produto D:
Produto mais caro: Produto{nome='Produto D', preco=23.0, quantidade=2}

Acredito que tenha algum problema no método. Pode me ajudar, por favor?

Impressão x Casting ( resolvido )

Olá teacher Cami, sou iniciante em Java e estou adorando suas aulas, mas tenho uma questão com relação a este ponto.
// Iterando sobre a lista sem Generics (necessário fazer cast)
for (Object elemento : listaSemGenerics) {
String str = (String) elemento;
System.out.println(str);
}
observei que não preciso de fato de um casting para poder imprimir os valores da lista, e que
a forma de casting empregada gera uma Exception, buscando na documentação a forma de
fazer o casting então ficaria assim. String str = elemento.toString();
mas gostaria saber sua explicação, se fiz algo de errado que tenha vindo a causar erro ao testar,
e qual seria a melhor forma de se fazer esse casting.

Ungenerics Types

Olá! Apenas vim deixar uma dica aqui para si e para quem está acompanhando o Bootcamp sobre coleções não genéricas.

Estou usando o Eclipse e notei que para criar um tipo não genérico é necessário adicionar o Object para poder identificar como um tipo não genérico, vou deixar um exemplo aqui usando uma Lista.

List listUngeneric = new ArrayList<>();
listUngeneric .add("collections");
listUngeneric .add(2023);

Muito obrigado!

Dúvida no entendimento do Comparable

Olá Camila.
A minha dúvida sobre o comparable está no seguinte código:

@Override public int compareTo(Pessoa pessoa) { return Integer.compare(idade, pessoa.getIdade()); }

Não exatamente no que ele está fazendo, eu consigo entender que está fazendo a comparação entre as idades, mas a minha dúvida é como isso funcionaria dentro da classe, por exemplo:
Quando se cria uma lista de Pessoas, vão sendo criadas espaços na memória de objetos do tipo Pessoa certo?
Mas quando se compara a lista de pessoas que é passado por parâmetro com a idade que está dentro da classe, como funciona?

Deixa eu tentar fazer uma pergunta menos confusa kkkk.

public List<Pessoa> ordenarPorIdade() { List<Pessoa> pessoasPorIdade = new ArrayList<>(pessoaList); Collections.sort(pessoasPorIdade); return pessoasPorIdade; }

Nesse caso, o que eu não consigo entender é como é feita essa comparação, já que está sendo comparado a Lista pessoa com o próprio atributo dentro da classe....

Me ajuda?

Olá Cami!!

Estou fazendo aqui o Desafio do Gerenciador de Alunos e coloquei um método para imprimir por nome, media e matricula.
Criei os comparator, porem quando imprimo por matricula, esta saindo duplicado, nao respeitando o equals() and hashCode().

Eu preciso colocar também dentro desse comparador o equals e hashcode?

Estou adorando o curso! Vc é muito boa! OBRIGADAAA!!

Aluno.java

package set.DesafioListaDeAlunos.modelo;

import java.util.Comparator;
import java.util.Objects;

public class Aluno implements Comparable<Aluno>{
    private String nome;
    private int matricula;
    private double media;

    public Aluno(String nome, int matricula, double media) {
        this.nome = nome;
        this.matricula = matricula;
        this.media = media;
    }

    public String getNome() {
        return nome;
    }
    public int getMatricula() {
        return matricula;
    }
    public double getMedia() {
        return media;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Aluno aluno)) return false;
        return getMatricula() == aluno.getMatricula() && Objects.equals(getNome(), aluno.getNome());
    }
    @Override
    public int hashCode() {
        return Objects.hash(getNome(), getMatricula());
    }

    @Override
    public String toString() {
        return String.format("Aluno: %s - Matricula: %d - Média: %.1f", getNome(), getMatricula(),getMedia());
    }

    @Override
    public int compareTo(Aluno a) {
        return nome.compareTo(a.getNome());
    }
}

class ComparadorPorMatricula implements Comparator<Aluno>{
    @Override
    public int compare(Aluno o1, Aluno o2) {
        return Long.compare(o1.getMatricula(), o2.getMatricula());
    }
}

class ComparadorPorMedia implements Comparator<Aluno>{
    @Override
    public int compare(Aluno o1, Aluno o2) {
        return Double.compare(o1.getMedia(), o2.getMedia());
    }
}

GerenciadorAlunos.java

package set.DesafioListaDeAlunos.modelo;

import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class GerenciadorAlunos {
    private Set<Aluno> alunosSet;

    public GerenciadorAlunos() {
        this.alunosSet = new HashSet<>();
    }

    public void adicionarAluno(String nome, int matricula, double media){
        alunosSet.add(new Aluno(nome, matricula, media));
    }
    public void removerAluno(long matricula){
        Aluno alunoRemover = null;
        for (Aluno a: alunosSet){
            if (a.getMatricula() == matricula){
                alunoRemover = a;
            }
        }
        alunosSet.remove(alunoRemover);
    }
    public void exibirAlunosPorNome(){
        Set<Aluno> listaPorNome = new TreeSet<>(alunosSet);
        System.out.println("\nAlunos Matriculados (nome): ");
        for (Aluno a : listaPorNome){
            System.out.printf(" > Aluno: %s - Matricula: %d - Média: %.1f\n", a.getNome(), a.getMatricula(), a.getMedia());
        }
    }
    public void exibirAlunosPorMedia(){
        Set<Aluno> listaPorMedia = new TreeSet<>(new ComparadorPorMedia());
        listaPorMedia.addAll(alunosSet);
        System.out.println("\nAlunos Matriculados (media): ");
        for (Aluno a : listaPorMedia){
            System.out.printf(" > Aluno: %s - Matricula: %d - Média: %.1f\n", a.getNome(), a.getMatricula(), a.getMedia());
        }
    }
    public void exibirAlunosPorMatricula(){
        Set<Aluno> listaPorMatricula = new TreeSet<>(new ComparadorPorMatricula());
        listaPorMatricula.addAll(alunosSet);
        System.out.println("\nAlunos Matriculados: (matricula)");
        for (Aluno a : listaPorMatricula){
            System.out.printf(" > Aluno: %s - Matricula: %d - Média: %.1f\n", a.getNome(), a.getMatricula(), a.getMedia());
        }
    }
}

Principal.java

package set.DesafioListaDeAlunos.principal;

import set.DesafioListaDeAlunos.modelo.GerenciadorAlunos;

public class Principal {
    public static void main(String[] args) {
        GerenciadorAlunos gerenciadorAlunos = new GerenciadorAlunos();

        gerenciadorAlunos.adicionarAluno("Aluno 1", 3341, 8.7);
        gerenciadorAlunos.adicionarAluno("Aluno 2", 3124, 9.3);
        gerenciadorAlunos.adicionarAluno("Aluno 3", 1233, 8.9);
        gerenciadorAlunos.adicionarAluno("Aluno 4", 3134, 9.1);
        gerenciadorAlunos.adicionarAluno("Aluno 4", 5456, 7.5);
        gerenciadorAlunos.adicionarAluno("Aluno 5", 7657, 7.5);
        gerenciadorAlunos.adicionarAluno("Aluno 2", 3755, 8.9);

        gerenciadorAlunos.exibirAlunosPorMatricula();
        gerenciadorAlunos.exibirAlunosPorNome();
        gerenciadorAlunos.exibirAlunosPorMedia();
    }
}

IEnumerator

Hi Camila!

Talking about Collections.

I'd like to know, which is the relationship of the IEnumerator in java, for instance in c# we've IEnums, but in java there's something like it?

gitignore

tem como eu criar um arquivo gitignore depois de ter criado o repositório no github?

Themes Intellij

Olá Camila,

Parabéns pelas aulas, estou gostando muito da sua didática.
Uma pergunta não muito técnica, que tema é esse que você esta usando no Intellij pra esse curso?

Obrigado :)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.