Ich muss eine Liste von Objekten (Student) unter Verwendung eines Attributs (Position) des bestimmten Objekts gruppieren. Der Code ist wie folgt:
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;
}
}
Bitte schlagen Sie mir einen sauberen Weg vor.
Antworten:
Dadurch wird das Studenten - Objekt der hinzufügen
HashMap
mitlocationID
als Schlüssel.Durchlaufen Sie diesen Code und fügen Sie die Schüler hinzu zu
HashMap
:Wenn Sie möchten, dass alle Schüler bestimmte Standortdetails haben, können Sie Folgendes verwenden:
Dadurch erhalten Sie alle Schüler mit der gleichen Standort-ID.
quelle
In Java 8:
quelle
Student
Klasse "stud_location
Freundlich" angegeben ist. NurStudent
Klassen und Klassen, die in demselben Paket definiert sind,Student
können darauf zugreifenstud_location
. Wenn Sie setzenpublic String stud_location;
stattString stud_location;
, sollte diese Arbeit. Oder Sie können eine Getter-Funktion definieren. Weitere Informationen unter cs.princeton.edu/courses/archive/spr96/cs333/java/tutorial/java/…quelle
Verwenden von Java 8
Das Ergebnis wird sein:
quelle
Java 8 groupingBy Collector
Wahrscheinlich ist es spät, aber ich möchte eine verbesserte Idee zu diesem Problem teilen. Dies ist im Grunde die gleiche Antwort von @Vitalii Fedorenko, aber handlicher zum Herumspielen.
Sie können das einfach verwenden,
Collectors.groupingBy()
indem Sie die Gruppierungslogik als Funktionsparameter übergeben, und Sie erhalten die geteilte Liste mit der Schlüsselparameterzuordnung. Beachten Sie, dass die VerwendungOptional
verwendet wird, um unerwünschte NPE zu vermeiden, wenn die bereitgestellte Liste vorhanden istnull
Jetzt können Sie alles damit gruppieren . Für den Anwendungsfall hier in der Frage
Map<String, List<Student>> map = groupBy(studlist, Student::getLocation);
Vielleicht möchten Sie sich auch dieses Handbuch zu Java 8 groupingBy Collector ansehen
quelle
Sie können Folgendes verwenden:
//drucken
quelle
Implementieren Sie die SQL GROUP BY-Funktion in Java mithilfe von Comparator. Der Comparator vergleicht Ihre Spaltendaten und sortiert sie. Wenn Sie sortierte Daten behalten, die als gruppierte Daten aussehen, z. B. wenn Sie dieselben wiederholten Spaltendaten haben, sortieren Sie sie nach dem Sortiermechanismus, indem Sie dieselben Daten auf einer Seite behalten, und suchen Sie dann nach anderen Daten, bei denen es sich um unterschiedliche Daten handelt. Dies wird indirekt als Gruppierung derselben Daten angesehen.
Die Ausgabe erfolgt hier für die oben genannte ProductBean-Liste. Die GROUP BY-Kriterien werden hier angezeigt. Wenn Sie die Eingabedaten sehen, die eine Liste der ProductBean an Collections.sort (Liste, Objekt des Komparators für Ihre erforderliche Spalte) erhalten, wird dies basierend auf Ihrer Komparatorimplementierung sortiert und Sie können die GROUPED-Daten in der folgenden Ausgabe sehen. Hoffe das hilft...
quelle
Sie können so sortieren:
Angenommen, Sie haben auch den Getter für den Standort in Ihrer Schülerklasse.
quelle
Sie könnten dies tun:
Die Schlüssel sind Orte und die Werteliste der Schüler. So können Sie später eine Gruppe von Studenten erhalten, indem Sie einfach Folgendes verwenden:
quelle
Sie können
guava
's verwendenMultimaps
es drucken:
quelle
Wenn Sie mehrere Objekte für die Gruppe hinzufügen möchten, können Sie das Objekt einfach in
compositKey
einer durch Komma getrennten Methode hinzufügen :quelle
quelle