J'ai besoin de grouper une liste d'objets (Student) en utilisant un attribut (Location) de l'objet particulier, le code est comme ci-dessous,
public class Grouping {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
List<Student> studlist = new ArrayList<Student>();
studlist.add(new Student("1726", "John", "New York"));
studlist.add(new Student("4321", "Max", "California"));
studlist.add(new Student("2234", "Andrew", "Los Angeles"));
studlist.add(new Student("5223", "Michael", "New York"));
studlist.add(new Student("7765", "Sam", "California"));
studlist.add(new Student("3442", "Mark", "New York"));
//Code to group students by location
/* Output should be Like below
ID : 1726 Name : John Location : New York
ID : 5223 Name : Michael Location : New York
ID : 4321 Name : Max Location : California
ID : 7765 Name : Sam Location : California
*/
for (Student student : studlist) {
System.out.println("ID : "+student.stud_id+"\t"+"Name : "+student.stud_name+"\t"+"Location : "+student.stud_location);
}
}
}
class Student {
String stud_id;
String stud_name;
String stud_location;
Student(String sid, String sname, String slocation) {
this.stud_id = sid;
this.stud_name = sname;
this.stud_location = slocation;
}
}
Veuillez me suggérer une manière propre de le faire.
Réponses:
Cela ajoutera l'objet étudiants à la clé
HashMap
aveclocationID
comme clé.Répétez ce code et ajoutez des étudiants au
HashMap
:Si vous voulez que tous les étudiants aient des détails de localisation particuliers, vous pouvez utiliser ceci:
ce qui vous permettra d'obtenir tous les étudiants avec le même identifiant de lieu.
la source
Dans Java 8:
la source
Student
classestud_location
est spécifié comme amical. Seules lesStudent
classes et toutes les classes définies dans le même package deStudent
peuvent y accéderstud_location
. Si vous mettezpublic String stud_location;
au lieu deString stud_location;
, cela devrait fonctionner. Ou vous pouvez définir une fonction getter. Plus d'infos dans cs.princeton.edu/courses/archive/spr96/cs333/java/tutorial/java/…la source
Utilisation de Java 8
Le résultat sera:
la source
Regroupement Java 8 par collecteur
Il est probablement tard mais j'aime partager une idée améliorée de ce problème. C'est fondamentalement la même chose que la réponse de @Vitalii Fedorenko, mais c'est plus pratique pour jouer.
Vous pouvez simplement utiliser le
Collectors.groupingBy()
en passant la logique de regroupement en tant que paramètre de fonction et vous obtiendrez la liste divisée avec le mappage des paramètres clés. Notez que l'utilisationOptional
est utilisée pour éviter le NPE indésirable lorsque la liste fournie estnull
Maintenant, vous pouvez groupBy n'importe quoi avec ça. Pour le cas d'utilisation ici dans la question
Map<String, List<Student>> map = groupBy(studlist, Student::getLocation);
Vous aimeriez peut-être consulter également ce Guide du regroupement Java 8
la source
Vous pouvez utiliser les éléments suivants:
//impression
la source
Implémentez la fonctionnalité SQL GROUP BY en Java à l'aide de Comparator, le comparateur comparera vos données de colonne et les triera. Fondamentalement, si vous conservez des données triées qui ressemblent à des données groupées, par exemple si vous avez les mêmes données de colonne répétées, le mécanisme de tri les trie en gardant les mêmes données d'un côté, puis recherchez d'autres données qui sont des données différentes. Ceci est indirectement considéré comme un GROUPEMENT des mêmes données.
La sortie est ici pour que la liste ProductBean ci-dessus soit faite selon les critères GROUP BY, ici si vous voyez les données d'entrée qui sont données la liste de ProductBean à Collections.sort (liste, objet de comparateur pour votre colonne requise) Cela triera en fonction de l'implémentation de votre comparateur et vous pourrez voir les données groupées dans la sortie ci-dessous. J'espère que cela t'aides...
la source
Vous pouvez trier comme ceci:
En supposant que vous ayez également le getter pour l'emplacement sur votre classe Student.
la source
Vous pouvez faire ceci:
les clés seront les emplacements et la liste des valeurs des étudiants. Ainsi, plus tard, vous pouvez obtenir un groupe d'étudiants simplement en utilisant:
la source
vous pouvez utiliser
guava
« sMultimaps
il imprime:
la source
Si vous souhaitez ajouter plusieurs objets pour group by, vous pouvez simplement ajouter l'objet dans la
compositKey
méthode en séparant par une virgule:la source
la source