<p><img src="https://i.imgur.com/D01Fpky.png" alt="" title="Entre no nosso site e veja nossos cursos"></p>
<h1>
<img class="emoji" alt=":coffee:" src="https://cdn.jsdelivr.net/npm/@hackmd/emojify.js@2.1.0/dist/images/basic/coffee.png"> Java OO Aula 7
</h1>
<p>O objetivo deste curso é abordar os principais conceitos, empregar as principais estruturas de dados, e trabalhar utilizando as principais boas práticas de Programação Orientada a Objetos [POO] em **Java**.
<span></span></p>
<blockquote style="border-left-color: red;">
<p><span class="color" data-color="red"></span><span> </span><small><i class="fa fa-user"></i> Prof Fernando Gomes - fernandojnr@gmail.com</small></p></blockquote>
<h2 id="-Tema-da-aula" data-id="-Tema-da-aula"><a class="anchor hidden-xs" href="#-Tema-da-aula" title="-Tema-da-aula"><span class="octicon octicon-link"></span></a><img class="emoji" alt=":book:" src="https://cdn.jsdelivr.net/npm/@hackmd/emojify.js@2.1.0/dist/images/basic/book.png">
<span> Tema da aula:</span></h2><span>
<p>Nessa sétima aula, apresentamos o relacionamento <strong>many to many</strong> entre classes.</p>
<p><br />Professor tem uma lista de turmas em que dá aula; Aluno tem uma lista de turmas em que está inscrito.</p>
<p><br />A partir daí, criamos uma lista de professores de um aluno e uma lista de alunos de cada professor.</p>
<p><br />Utilizamos <strong>stream, map, Collectors.toList() e o método distinct()</strong> para excluir dados repetidos - porque um aluno, por exemplo, pode estar em duas turmas de disciplinas diferentes mas de um mesmo professor.</p>
<br>
</span>
<h4>
Estrutura do projeto depois de finalizado
</h4>

<h3>
Aluno.java
</h3>
```java=
package entity;
import java.util.ArrayList;
import java.util.List;
public class Aluno {
private Integer idAluno;
private String nome;
private List<Turma> turmas;
public Aluno() {
}
// construtor sem a lista de turmas
public Aluno(Integer idAluno, String nome) {
this.idAluno = idAluno;
this.nome = nome;
}
// tiramos a lista de turmas do toString
@Override
public String toString() {
return "Aluno [idAluno=" + idAluno
+ ", nome=" + nome + "]";
}
public Integer getIdAluno() {
return idAluno;
}
public void setIdAluno(Integer idAluno) {
this.idAluno = idAluno;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public List<Turma> getTurmas() {
return turmas;
}
public void setTurmas(List<Turma> turmas) {
this.turmas = turmas;
}
public void adicionarTurma(Turma... t) {
if (this.turmas == null) {
this.turmas = new ArrayList<Turma>();
}
for (Turma x : t)
this.turmas.add(x);
}
}
```
<h3>
Professor.java
</h3>
```java=
package entity;
import java.util.ArrayList;
import java.util.List;
public class Professor {
private Integer idProfessor;
private String nome;
private List<Turma> turmas;
public Professor() {
}
// construtor sem a lista de turmas
public Professor(Integer idProfessor, String nome) {
this.idProfessor = idProfessor;
this.nome = nome;
}
// tiramos a lista de turmas do toString
@Override
public String toString() {
return "Professor [idProfessor="
+ idProfessor + ", nome=" + nome + "]";
}
public Integer getIdProfessor() {
return idProfessor;
}
public void setIdProfessor(Integer idProfessor) {
this.idProfessor = idProfessor;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public List<Turma> getTurmas() {
return turmas;
}
public void setTurmas(List<Turma> turmas) {
this.turmas = turmas;
}
public void adicionarTurma(Turma... t) {
if (this.turmas == null) {
this.turmas = new ArrayList<Turma>();
}
for (Turma x : t)
this.turmas.add(x);
}
}
```
<h3>
Turma.java
</h3>
```java=
package entity;
import java.util.ArrayList;
import java.util.List;
public class Turma {
private String disciplina;
private Professor professor;
private List<Aluno> alunos;
public Turma() {
}
// construtor sem a lista de alunos
public Turma(String disciplina, Professor professor) {
this.disciplina = disciplina;
this.professor = professor;
}
// removemos a lista de alunos do toString
@Override
public String toString() {
return "Turma [disciplina=" + disciplina
+ ", professor=" + professor + "]";
}
public String getDisciplina() {
return disciplina;
}
public void setDisciplina(String disciplina) {
this.disciplina = disciplina;
}
public Professor getProfessor() {
return professor;
}
public void setProfessor(Professor professor) {
this.professor = professor;
}
public List<Aluno> getAlunos() {
return alunos;
}
public void setAlunos(List<Aluno> alunos) {
this.alunos = alunos;
}
public void adicionarAluno(Aluno... a) {
if (this.alunos == null) {
this.alunos = new ArrayList<Aluno>();
}
for (Aluno x : a)
this.alunos.add(x);
}
}
```
<h3>
ControllerTurma.java
</h3>
```java=
package control;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import entity.Aluno;
import entity.Professor;
import entity.Turma;
public class ControllerTurma {
public static void listarProfessores(Aluno a) {
List<String> professores = a.getTurmas().stream()
.map(x -> x.getProfessor().getNome()).distinct()
.collect(Collectors.toList());
System.out.println("Professores de " + a.getNome());
System.out.println(professores + "\n");
}
public static void listarAlunos(Professor p) {
List<String> turmaCompleta = new ArrayList<String>();
for(Turma t : p.getTurmas()){
List<String>turma = t.getAlunos().stream().
map(x->x.getNome()+" >>> "+x.getIdAluno())
.collect(Collectors.toList());
turmaCompleta.addAll(turma);
}
turmaCompleta = turmaCompleta.stream().distinct()
.collect(Collectors.toList());
System.out.println("Alunos de "+p.getNome());
System.out.println(turmaCompleta);
}
}
```
<h3>
Main.java
</h3>
```java=
package main;
import control.ControllerTurma;
import entity.Aluno;
import entity.Professor;
import entity.Turma;
public class Main {
public static void main(String[] args) {
Aluno joao = new Aluno(10, "joao");
Professor belem = new Professor(100, "belem");
Professor luciana = new Professor(101, "luciana");
Turma t1 = new Turma("JAVA", belem);
Turma t2 = new Turma("Angular", luciana);
Turma t3 = new Turma("Oracle", belem);
joao.adicionarTurma(t1, t2, t3);
// joao esta em 3 turmas
belem.adicionarTurma(t1, t3);
// belem tem 2 turmas
luciana.adicionarTurma(t2);
// luciana tem uma turma
Aluno fernando = new Aluno(11, "fernando");
Aluno daniel = new Aluno(12, "daniel");
Aluno giovanni = new Aluno(13, "giovanni");
Aluno juliana = new Aluno(14, "juliana");
Aluno priscilla = new Aluno(15, "priscilla");
t1.adicionarAluno(fernando, daniel);
t2.adicionarAluno(fernando, juliana, giovanni);
t3.adicionarAluno(priscilla, daniel, giovanni);
fernando.adicionarTurma(t1, t2);
daniel.adicionarTurma(t1, t3);
juliana.adicionarTurma(t2);
giovanni.adicionarTurma(t2, t3);
priscilla.adicionarTurma(t3);
ControllerTurma.listarProfessores(joao);
ControllerTurma.listarProfessores(giovanni);
ControllerTurma.listarProfessores(juliana);
ControllerTurma.listarAlunos(luciana);
ControllerTurma.listarAlunos(belem);
}
}
```
<h5>
Rodando o método main, temos:
</h5>
```=
Professores de joao
[belem, luciana]
Professores de giovanni
[luciana, belem]
Professores de juliana
[luciana]
Alunos de luciana
[fernando >>> 11, juliana >>> 14,
giovanni >>> 13]
Alunos de belem
[fernando >>> 11, daniel >>> 12,
priscilla >>> 15, giovanni >>> 13]
```
<blockquote style="border-left-color: red;">
<p><span class="color" data-color="red"></span><span> </span><small><i class="fa fa-user"></i> Prof Fernando Gomes - fernandojnr@gmail.com</small></p></blockquote>
<br>
<div class="alert alert-info">
<blockquote style="border-left-color: blue;">
<p><span class="color" data-color="blue"></span><span> </span><small><i class="fa fa-user"></i> E.B. Cursos https://www.cursoseb.com.br/</small><br>
<span class="color" data-color="blue"></span><span> </span><small><i class="fa fa-user"></i> E.B. Cursos EAD https://edsonbelemtreinamento.com.br/ead/</small></p>
</blockquote>
</div>