Pergunta

Isto é, se eu tivesse dois ou mais conjuntos, e eu queria voltar um novo conjunto contendo quer:

  1. Todos os elementos de cada conjunto tem em comum (AND).
  2. Todos os elementos total de cada conjunto (OR).
  3. Todos os elementos únicos para cada conjunto. (XOR).

Existe, uma maneira fácil pré-existente para fazer isso?

Editar:? Essa é a terminologia errada, não é

Foi útil?

Solução

Assumindo 2 Set objetos a e b

E (intersecção de dois conjuntos)

a.retainAll(b); 

OR (união de dois conjuntos)

a.addAll(b);

XOR quer lançar seu próprio loop:

foreach item
if(a.contains(item) and !b.contains(item) ||  (!a.contains(item) and b.contains(item)))
 c.add(item)

ou faça o seguinte:

c.addAll(a); 
c.addAll(b);
a.retainAll(b); //a now has the intersection of a and b
c.removeAll(a); 

Veja a Set documentação e este página . Para mais.

Outras dicas

Você pode usar o Google-Collections Define classe que tem a intersecção métodos () união () e diferença simétrica ().

Sets.intersection(set1, set2);
Sets.union(set1, set2);

SetView view = Sets.intersection(Sets.union(set1, set2), set3);
Set result = view.copyInto(new HashSet());

@Milhous disse:

Confira a API sets. se você usar addAll você pode obter ou. Se você usar retainAll você pode obter o e. eu não saber sobre o Xor.

Parece que se você tivesse conjuntos s1 e s2 você poderia fazer isso para obter XOR:

  1. copiar o conjunto s1 para s3
  2. s1.removeAll(s2); (S1 agora contém todos os elementos não em s2)
  3. s2.removeAll(s3); (s2 agora contém todos os elementos não em s3 = o antigo S1)
  4. s1.addAll(s2); (S1 agora contém a união do acima de dois conjuntos)

confira os conjuntos api . se você usar addAll você pode obter ou. Se você usar retainAll você pode obter o e. Eu não sei sobre o XOR.

Editar:. a partir da documentação set

... Se a coleção especificada é também um conjunto, a operação addAll modifica eficazmente este conjunto de modo a que o seu valor é a união dos dois conjuntos.

.... Se a coleção especificada é também um conjunto, esta operação modifica eficazmente este conjunto de modo a que o seu valor é a interseção dos dois conjuntos.

Eu tenho certeza que suporta API Jakarta comuns coleções uniões, interseções etc.

Eu ficaria espantado se a API do Google Collections fez não tão bem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top