Trilhas
/
Java
Java
/
Exercícios
/
Gotta Snatch 'Em All
Gotta Snatch 'Em All

Gotta Snatch 'Em All

Exercício de aprendizagem

Introdução

Conjuntos

Um Set é uma coleção não ordenada que (diferentemente de List) tem a garantia de não conter valores duplicados.

O parâmetro de tipo genérico da interface Set denota o tipo dos elementos contidos no Set:

Set<Integer> ints = Set.of(1, 2, 3);
Set<String> strings = Set.of("alpha", "beta", "gamma");
Set<Object> mixed = Set.of(1, false, "foo");

Observe que o método Set.of() cria uma instância não modificável de Set. Tentar chamar métodos como add e remove nessa instância resultará em uma exceção em tempo de execução.

Para criar um Set modificável, você precisa instanciar uma classe que implemente a interface Set. A classe embutida mais usada que implementa essa interface é a classe HashSet.

Set<Integer> ints = new HashSet<>();

A interface Set estende as interfaces Collection e Iterable e, portanto, compartilha muitos métodos com outros tipos de coleções. Uma diferença notável em relação à interface Collection, no entanto, é que métodos como add e remove retornam um boolean (em vez de void) que indica se o item estava contido no conjunto quando aquele método foi chamado:

Set<Integer> set = new HashSet<>();
set.add(1);
// => true
set.add(2);
// => true
set.add(1);
// => false
set.size();
// => 2
set.contains(1);
// => true
set.contains(3);
// => false
set.remove(3);
// => false
set.remove(2);
// => true
set.size();
// => 1

Instruções

Sua nostalgia por cartas Blorkemon™️ não dá sinais de desacelerar: você até voltou a colecioná-las e está chamando seus amigos para entrar nessa também.

Neste exercício, você vai usar a interface Set para ajudar a gerenciar sua coleção, já que cartas duplicadas não importam quando o objetivo é conseguir todas as cartas existentes.

1. Comece uma coleção

Você acabou de encontrar seu velho estoque de cartas Blorkemon™️! O estoque tem um monte de cartas duplicadas, então é hora de começar uma nova coleção removendo as duplicatas.

Você quer muito que seus amigos entrem na sua loucura por Blorkemon™️, e a melhor forma é dar o pontapé inicial na coleção deles dando uma carta a cada um.

Implemente o método newCollection, que transforma uma lista de cartas em um Set que representa sua nova coleção.

GottaSnatchEmAll.newCollection(List.of("Newthree", "Newthree", "Newthree"));
// => {"Newthree"}

2. Aumente a coleção

Depois que você tem uma coleção, ela ganha vida própria e precisa crescer.

Implemente o método addCard, que recebe uma nova carta e seu conjunto atual de cartas colecionadas. O método deve adicionar a nova carta à coleção caso ela ainda não esteja lá e deve retornar um boolean indicando se a coleção foi atualizada.

Set<String> collection = GottaSnatchEmAll.newCollection("Newthree");
GottaSnatchEmAll.addCard("Scientuna",collection);
// => true

collection.contains("Scientuna");
// => true

3. Comece a trocar

Você quer muito que seus amigos entrem na sua loucura por Blorkemon™️, então é hora de começar a trocar!

Ao trocar com amigos, nem toda troca vale a pena, ou pode ser feita. Você só deve trocar se tanto você quanto seu amigo tiverem uma carta que o outro não tem.

Implemente o método canTrade, que recebe sua coleção atual e a coleção de um dos seus amigos. Ele deve retornar um boolean indicando se uma troca é possível, seguindo as regras acima.

Set<String> myCollection = Set.of("Newthree");
Set<String> theirCollection = Set.of("Scientuna");
GottaSnatchEmAll.canTrade(myCollection, theirCollection);
// => true

4. Identifique cartas em comum

Você e seus amigos entusiastas de Blorkemon™️ se reúnem e se perguntam quais cartas são as mais comuns.

Implemente o método commonCards, que recebe uma lista de coleções e retorna uma coleção de cartas que todas as coleções possuem.

GottaSnatchEmAll.commonCards(List.of(Set.of("Scientuna"), Set.of("Newthree","Scientuna")));
// => {"Scientuna"}

5. Todas as cartas

Você e seus amigos, juntos, possuem todas as cartas Blorkemon™️?

Implemente o método allCards, que recebe uma lista de coleções e retorna uma coleção com todas as cartas diferentes de todas as coleções combinadas.

GottaSnatchEmAll.allCards(List.of(Set.of("Scientuna"), Set.of("Newthree","Scientuna")));
// => {"Newthree", "Scientuna"}
Editar via GitHub O link abre em uma nova janela ou aba
Java Exercism

Tudo pronto para começar Gotta Snatch 'Em All?

Crie sua conta no Exercism para aprender e dominar Java com 26 conceitos158 exercícios e mentoria humana de verdade, tudo de graça.