Criei um conjunto (set) de objetos de uma certa classe. Essa classe tem strings, e um double.
Preciso imprimir esse conjunto de varias formas, isto é, por ordem de cada tipo de string existente e por ordem do valor do double.
Como faço isso?
“Ordenar um conjunto por cada atributo de objeto contido nele?”
Eu posso utilizar qualquer implementação da Collection (List, Set)
Ficaria mais adequado por qual? Eu que preferi conjunto porque não aceita repetição. Em list eu teria que “preparar” o codigo um poquinho mais para não ocorrer duplicação.
No seu caso, use um ArrayList mesmo, e use Collections.sort.
Para cada tipo de ordenação, use um Comparator novo.
Alternativamente, você pode ter diferentes TreeSets, cada qual com seu Comparator específico para uma determinada ordenação.
R
rafamv9
Esse é exatamente meu problema.
Como defino um Comparator para cada tipo de String e um para um tipo double?
moacirjava
Set´s não são ordenados.
Para o seu caso eu usaria List.
importjava.util.ArrayList;importjava.util.Collections;importjava.util.Comparator;importjava.util.List;/** * * @author moacir */publicclassMain{staticclassOrdenaimplementsComparator<SeusDados>{/* utilizado por Comparator*/publicintcompare(SeusDadoso1,SeusDadoso2){returno1.suaString.compareTo(o2.suaString);}}staticclassSeusDadosimplementsComparable<SeusDados>{StringsuaString;DoubleseuDouble;publicSeusDados(Strings,Doubled){suaString=s;seuDouble=d;}publicDoublegetDouble(){returnseuDouble;}publicStringgetString(){returnsuaString;}publicintcompareTo(SeusDadoso1){returnseuDouble.compareTo(o1.seuDouble);}publicinthashCode(){returnsuaString.length();}publicbooleanequals(Objecto){if((oinstanceofSeusDados)&(((SeusDados)o).suaString==this.suaString))returntrue;elsereturnfalse;}publicStringtoString(){returnsuaString+" "+seuDouble+"\n";}}publicstaticvoidmain(String[]args){SeusDadossd;List<SeusDados>lista=newArrayList<SeusDados>();for(inti=0;i<10;i++){sd=newSeusDados("nome "+i,newDouble(i*Math.random()));lista.add(sd);}/*Ordena por Double.*/Collections.sort(lista);System.out.println("Ordenada por Double: "+lista);/*Ordena por String.*/Ordenaordena=newOrdena();Collections.sort(lista,ordena);System.out.println("Ordena por String: "+lista);}}
R
rafamv9
Valeu mesmo.
Pensei também em criar uma classe separada para tal fim, mas isso eu não posso fazer. Eu teria que fazer então tres classes. Uma para cada string.
E eu não posso usar mais do que a classe do exercicio.