Como usar if em um arrayList?

Como fazer para não deixar inserir uma partida no arraylist caso já exista essa partida com o mesmo mando de campo?
Deixar só inserir a mesma partida se for em mando de campos diferente.

Embaixo o codigo que eu fiz até agora.

public class Partida
{
    
    public String clube;
    public String clubeVisitante;
    public String estadio;
    public int golsClube1;
    public int golsClube2;
   
    public Partida (String clube,String clubeVisitante , String estadio, int golsClube1, int golsClube2) {

        this.clube = clube;
        this.clubeVisitante = clubeVisitante;
        this.estadio = estadio;
        this.golsClube1 = golsClube1;
        this.golsClube2 = golsClube2;       
    }
    
 
    
}
import java.util.ArrayList;

public class TestePartida extends junit.framework.TestCase{
    
    public TestePartida(){
        ArrayList<Partida> partidas = new ArrayList<Partida>(); 
      
        partidas.add(new Partida("Palmeiras", "Santos" , "Palestra" , 2, 1)); 
        partidas.add(new Partida("Palmeiras", "Santos" , "Palestra" , 2, 1)); 

for (Partida p : partidas) {
    if(p.clube == p.clube and p.estadio==p.estadio) {
        System.out.println("NÃO PODE INSERIR");
    }
}
}
}

No java não se usa and no if se usa &&. e o seu if esta fazendo uma comparação com a mesma coisa.
O que vc quer comparar?

Precisa mesmo ser ArrayList? Se a resposta for não use um Set.

Set não aceita elementos repetidos.

Ou seja, se tentar inserir algo como:

Santos 2 x 2 Palmeiras Palestra
Santos 2 x 2 Palmeiras Palestra

Ele ira inserir apenas uma vez.

Algumas dicas:

1 - o operador == só serve para comparar tipos primitivos (int, float, double, etc.) ou referências para objetos (testa se duas referências apontam para o mesmo objeto). Sendo assim, você usar == para comparar dois objetos diferentes (duas chamadas a new), o resultado será false, mesmo que seus campos possuam os mesmo valores.

2 - para compar objetos você deve usar o método equals(), presente em todas as classes (pois ele é definido na classe Object);

A melhor maneira de implementar o que você quer:

1 - na classe Partida, sobrescreva o método equals() para retornar true se e somente se o mando das partidas for igual (seria interessante se você incluisse o ano e a rodada da partida, ai você tem uma chave natural autêntica);

2 - uma vez que o método equals() esteja corretamente sobrescrito, basta usar um Set (HashSet, TreeSet, etc.) no lugar de ArrayList;

[quote=rmendes08]Algumas dicas:

1 - o operador == só serve para comparar tipos primitivos (int, float, double, etc.) ou referências para objetos (testa se duas referências apontam para o mesmo objeto). Sendo assim, você usar == para comparar dois objetos diferentes (duas chamadas a new), o resultado será false, mesmo que seus campos possuam os mesmo valores.

2 - para compar objetos você deve usar o método equals(), presente em todas as classes (pois ele é definido na classe Object);

A melhor maneira de implementar o que você quer:

1 - na classe Partida, sobrescreva o método equals() para retornar true se e somente se o mando das partidas for igual (seria interessante se você incluisse o ano e a rodada da partida, ai você tem uma chave natural autêntica);

2 - uma vez que o método equals() esteja corretamente sobrescrito, basta usar um Set (HashSet, TreeSet, etc.) no lugar de ArrayList;
[/quote]

Esqueci de dizer isso hehe.

Só para complementar, o Eclipse pode sobrescrever os metodos equals e o hascode.

[quote=rmendes08]Algumas dicas:

1 - o operador == só serve para comparar tipos primitivos (int, float, double, etc.) ou referências para objetos (testa se duas referências apontam para o mesmo objeto). Sendo assim, você usar == para comparar dois objetos diferentes (duas chamadas a new), o resultado será false, mesmo que seus campos possuam os mesmo valores.

2 - para compar objetos você deve usar o método equals(), presente em todas as classes (pois ele é definido na classe Object);

A melhor maneira de implementar o que você quer:

1 - na classe Partida, sobrescreva o método equals() para retornar true se e somente se o mando das partidas for igual (seria interessante se você incluisse o ano e a rodada da partida, ai você tem uma chave natural autêntica);

2 - uma vez que o método equals() esteja corretamente sobrescrito, basta usar um Set (HashSet, TreeSet, etc.) no lugar de ArrayList;
[/quote]

sobresquever o metodo equals seria isso?

public boolean equals(Pardida p){
if(this.nome == p.nome()){

return true;
}else{
return false;
}
}

Se não me engano o método equals tem que receber um Object. Uma implementação mais segura, que é a que o Eclipse gera, seria assim:public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (!(obj instanceof Partida)) { return false; } Partida other = (Partida) obj; if (this.nome == null) { if (other.nome != null) { return false; } } else if (!this.nome.equals(other.nome)) { return false; } return true; }

[quote=jeff66]
sobresquever o metodo equals seria isso?

public boolean equals(Pardida p){
if(this.nome == p.nome()){

return true;
}else{
return false;
}
}[/quote]

Não. Em primeiro lugar o equals deve sempre receber um Object como parâmetro (se receber qualquer outra coisa ai não é sobrescrita).

Um exemplo válido:

class Teste {

	private int inteiro;
	private double decimal;
	private Object objeto;
	private String texto;

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		long temp;
		temp = Double.doubleToLongBits(decimal);
		result = prime * result + (int) (temp ^ (temp >>> 32));
		result = prime * result + inteiro;
		result = prime * result + ((objeto == null) ? 0 : objeto.hashCode());
		result = prime * result + ((texto == null) ? 0 : texto.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == null) {
			return false;
		}
		if (getClass() != obj.getClass()) {
			return false;
		}
		Teste other = (Teste) obj;
		if (Double.doubleToLongBits(decimal) != Double
				.doubleToLongBits(other.decimal)) {
			return false;
		}
		if (inteiro != other.inteiro) {
			return false;
		}
		if (objeto == null) {
			if (other.objeto != null) {
				return false;
			}
		} else if (!objeto.equals(other.objeto)) {
			return false;
		}
		if (texto == null) {
			if (other.texto != null) {
				return false;
			}
		} else if (!texto.equals(other.texto)) {
			return false;
		}
		return true;
	}

}

Esse exemplo foi gerado pelo próprio Eclipse.

Lembrando que se você sobrescrever o equals você deve sobrescrever o hashCode também.

Aqui tem uma explicação: http://javarevisited.blogspot.com.br/2011/02/how-to-write-equals-method-in-java.html

Até agora ficou assim.
Como eu faço para fazer o resto?

 public boolean equals(Object obj) {  
    if (this.estadio == obj) {  
        return true;  
    }else{
        return false;
    }
}
public class a{

        
      public static void main(String[] args) {  
        HashSet<Partida> partidas = new HashSet<Partida>();  
          
        partidas.add(new Partida("Palmeiras", "Santos" , "Palestra" , 2, 1)); 
         partidas.add(new Partida("Palmeiras", "Santos" , "Palestra" , 2, 1)); 
                  
  
        System.out.println(partidas.equals(partidas));  
    }  
} 

Você está entendendo tudo errado.

Olha como é:

@Override  
    public boolean equals(Object obj) {  
        if (this == obj) {  //primeiro compara se ambas variáveis apontam para o mesmo objeto
            return true;     //se sim então obviamente eles são o mesmo portanto retorna true
        }  
        if (obj == null) {  //Uma das regras do equals é que se você comparar o objeto
            return false;   //a uma referencia nula ele devera retornar false
        }  
        if (getClass() != obj.getClass()) {  //aqui testamos se eles são da mesma classe
            return false;   //se não forem da mesma classe retorna false
        }  
        Teste other = (Teste) obj;  //já que eles são da mesma classe podemos dar um casting sem problema
         //agora comparamos os atributos.
        if (Double.doubleToLongBits(decimal) != Double
                .doubleToLongBits(other.decimal)) {  
            return false;  
        }  
        if (inteiro != other.inteiro) {  
            return false;  
        }  
        if (objeto == null) {  
            if (other.objeto != null) {  
                return false;  
            }  
        } else if (!objeto.equals(other.objeto)) {  
            return false;  
        }  
        if (texto == null) {  
            if (other.texto != null) {  
                return false;  
            }  
        } else if (!texto.equals(other.texto)) {  
            return false;  
        }  
       //se todos os atributos que queremos comparar forem iguais então ele retorna true
        return true;  
    }  

Da uma lida nesse link: http://javarevisited.blogspot.com.br/2011/02/how-to-write-equals-method-in-java.html

public class Partida
{

public String clube;
public String clubeVisitante;
public String estadio;
public int golsClube1;
public int golsClube2;

public Partida (String clube,String clubeVisitante , String estadio, int golsClube1, int golsClube2) {

    this.clube = clube;
    this.clubeVisitante = clubeVisitante;
    this.estadio = estadio;
    this.golsClube1 = golsClube1;
    this.golsClube2 = golsClube2;       
}

public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof Partida)) {
return false;
}
Partida other = (Partida) obj;
if (this.estadio == null) {
if (other.estadio != null) {
return false;
}
} else if (!this.estadio.equals(other.estadio)) {
return false;
}
return true;
}

}

Sempre coloque o seu código dentro das tags code.

Agora analisando o seu código você apenas compara os estádios.

Se você tivesse:

public static void main(String[] args) {
		Partida a = new Partida("Santos", "Palmeiras", "Palestra", 2, 2);
		Partida b = new Partida("Vasco", "Palmeiras", "Palestra", 1, 2);
		Partida c = new Partida("São Paulo", "Palmeiras", "Palestra", 2, 3);
		System.out.println(a.equals(b));
		System.out.println(b.equals(c));
		System.out.println(c.equals(a));
	}

Você teria 3 true. Acredito que você terá que comparar todos os atributos.

E lembre-se, se sobrescrever o método equals você DEVE sobrescrever o hashCode.

para sobrescrever HashSet é a mesma coisa do equals?

import java.util.ArrayList;
public class Partida
{
    
    public String clube;
    public String clubeVisitante;
    public String estadio;
    public int golsClube1;
    public int golsClube2;
   
    public Partida (String clube,String clubeVisitante , String estadio, int golsClube1, int golsClube2) {

        this.clube = clube;
        this.clubeVisitante = clubeVisitante;
        this.estadio = estadio;
        this.golsClube1 = golsClube1;
        this.golsClube2 = golsClube2;       
    }
    
   public boolean equals(Object obj) {  
    if (this == obj) {  
        return true;  
    }  
    if (obj == null) {  
        return false;  
    }  
    if (!(obj instanceof Partida)) {  
        return false;  
    }  
    Partida other = (Partida) obj; 
        if (golsClube1 != other.golsClube1) {    
            return false;    
        }
        
         if (golsClube2 != other.golsClube2) {    
            return false;    
        }
        
        if (this.clube == null) {    
            if (other.clube != null) {    
                return false;    
         } 
            else if (!this.clube.equals(other.clube)) {  
        return false;  
        } 
    }
         if (this.clubeVisitante == null) {    
            if (other.clubeVisitante != null) {    
                return false;    
         } 
            else if (!this.clubeVisitante.equals(other.clubeVisitante)) {  
        return false;  
        } 
    }
     if (this.estadio == null) {  
        if (other.estadio != null) {  
            return false;  
        }  
    } else if (!this.estadio.equals(other.estadio)) {  
        return false;  
    }  
    return true;  
}   

}

Não. De uma olhada no link e no exemplo que eu postei.

Se você estiver usando Eclipse ele mesmo pode gerar a sobrescrita para você.