Das liegt daran, dass Student Klasse stud_location ist als Freundlich angegeben. Nur Student class und jede Klasse, die im selben Paket von definiert ist Student kann Zugreifen stud_location. Wenn Sie setzen public String stud_location; anstatt String stud_location;, das sollte funktionieren. Oder Sie können eine Getter-Funktion definieren. Mehr Infos im cs.princeton.edu/courses/archive/spr96/cs333/java/tutorial/java/…
– Eranga Heshan
30. Dezember 18 um 14:19 Uhr
Dileep
Dadurch wird das Objekt studenten zu hinzugefügt HashMap mit locationID als Schlüssel.
HashMap<Integer, List<Student>> hashMap = new HashMap<Integer, List<Student>>();
Iterieren über diesen Code und fügen Sie Schüler hinzu HashMap:
if (!hashMap.containsKey(locationId)) {
List<Student> list = new ArrayList<Student>();
list.add(student);
hashMap.put(locationId, list);
} else {
hashMap.get(locationId).add(student);
}
Wenn Sie alle Schüler mit bestimmten Standortdetails möchten, können Sie dies verwenden:
hashMap.get(locationId);
Dadurch erhalten Sie alle Schüler mit derselben Standort-ID.
Sie haben eine List of Location-Objekte deklariert und in der nächsten Zeile fügen Sie der vorherigen Liste ein Student-Objekt hinzu, das einen Fehler ausgeben sollte.
– OJVM
6. Dezember 17 um 15:25 Uhr
hashMap.get() gibt null zurück, wenn hashMap.contanisKey() false zurückgibt. Sie könnten den Aufruf der Methode containsKey() speichern, wenn Sie zuerst hashMap.get() aufrufen, das Ergebnis in einer lokalen Variablen speichern und prüfen, ob diese lokale Variable null ist
– Esteve
18. Januar 18 um 9:45 Uhr
@Dileep danke für diesen einen Mann. Meinen Tag gerettet.
– Sachawat Hossain
11. August 21 um 8:30 Uhr
Sampath challa
Map<String, List<Student>> map = new HashMap<String, List<Student>>();
for (Student student : studlist) {
String key = student.stud_location;
if(map.containsKey(key)){
List<Student> list = map.get(key);
list.add(student);
}else{
List<Student> list = new ArrayList<Student>();
list.add(student);
map.put(key, list);
}
}
Chirag
Verwenden Java 8
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
class Student {
String stud_id;
String stud_name;
String stud_location;
public String getStud_id() {
return stud_id;
}
public String getStud_name() {
return stud_name;
}
public String getStud_location() {
return stud_location;
}
Student(String sid, String sname, String slocation) {
this.stud_id = sid;
this.stud_name = sname;
this.stud_location = slocation;
}
}
class Temp
{
public static void main(String args[])
{
Stream<Student> studs =
Stream.of(new Student("1726", "John", "New York"),
new Student("4321", "Max", "California"),
new Student("2234", "Max", "Los Angeles"),
new Student("7765", "Sam", "California"));
Map<String, Map<Object, List<Student>>> map= studs.collect(Collectors.groupingBy(Student::getStud_name,Collectors.groupingBy(Student::getStud_location)));
System.out.println(map);//print by name and then location
}
}
Das Ergebnis wird sein:
{
Max={
Los Angeles=[Student@214c265e],
California=[Student@448139f0]
},
John={
New York=[Student@7cca494b]
},
Sam={
California=[Student@7ba4f24f]
}
}
Shafin Mahmud
Java 8-GruppierungNach Collector
Wahrscheinlich ist es spät, aber ich möchte eine verbesserte Idee zu diesem Problem teilen. Dies ist im Grunde dasselbe wie die Antwort von @Vitalii Fedorenko, aber handlicher, um herumzuspielen.
Sie können einfach die verwenden Collectors.groupingBy() indem Sie die Gruppierungslogik als Funktionsparameter übergeben, erhalten Sie die geteilte Liste mit der Schlüsselparameterzuordnung. Beachten Sie, dass mit Optional wird verwendet, um die unerwünschte NPE zu vermeiden, wenn die bereitgestellte Liste vorhanden ist null
Implementieren Sie die SQL GROUP BY-Funktion in Java mit Comparator, der Comparator vergleicht Ihre Spaltendaten und sortiert sie. Grundsätzlich, wenn Sie sortierte Daten behalten, die als gruppierte Daten aussehen, wenn Sie beispielsweise dieselben wiederholten Spaltendaten haben, sortieren Sie sie mit dem Sortiermechanismus, wobei dieselben Daten auf einer Seite bleiben, und suchen Sie dann nach anderen Daten, bei denen es sich um unterschiedliche Daten handelt. Dies wird indirekt als GRUPPIERUNG gleicher Daten angesehen.
public class GroupByFeatureInJava {
public static void main(String[] args) {
ProductBean p1 = new ProductBean("P1", 20, new Date());
ProductBean p2 = new ProductBean("P1", 30, new Date());
ProductBean p3 = new ProductBean("P2", 20, new Date());
ProductBean p4 = new ProductBean("P1", 20, new Date());
ProductBean p5 = new ProductBean("P3", 60, new Date());
ProductBean p6 = new ProductBean("P1", 20, new Date());
List<ProductBean> list = new ArrayList<ProductBean>();
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
list.add(p5);
list.add(p6);
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
ProductBean bean = (ProductBean) iterator.next();
System.out.println(bean);
}
System.out.println("******** AFTER GROUP BY PRODUCT_ID ******");
Collections.sort(list, new ProductBean().new CompareByProductID());
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
ProductBean bean = (ProductBean) iterator.next();
System.out.println(bean);
}
System.out.println("******** AFTER GROUP BY PRICE ******");
Collections.sort(list, new ProductBean().new CompareByProductPrice());
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
ProductBean bean = (ProductBean) iterator.next();
System.out.println(bean);
}
}
}
class ProductBean {
String productId;
int price;
Date date;
@Override
public String toString() {
return "ProductBean [" + productId + " " + price + " " + date + "]";
}
ProductBean() {
}
ProductBean(String productId, int price, Date date) {
this.productId = productId;
this.price = price;
this.date = date;
}
class CompareByProductID implements Comparator<ProductBean> {
public int compare(ProductBean p1, ProductBean p2) {
if (p1.productId.compareTo(p2.productId) > 0) {
return 1;
}
if (p1.productId.compareTo(p2.productId) < 0) {
return -1;
}
// at this point all a.b,c,d are equal... so return "equal"
return 0;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return super.equals(obj);
}
}
class CompareByProductPrice implements Comparator<ProductBean> {
@Override
public int compare(ProductBean p1, ProductBean p2) {
// this mean the first column is tied in thee two rows
if (p1.price > p2.price) {
return 1;
}
if (p1.price < p2.price) {
return -1;
}
return 0;
}
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return super.equals(obj);
}
}
class CompareByCreateDate implements Comparator<ProductBean> {
@Override
public int compare(ProductBean p1, ProductBean p2) {
if (p1.date.after(p2.date)) {
return 1;
}
if (p1.date.before(p2.date)) {
return -1;
}
return 0;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return super.equals(obj);
}
}
}
Die Ausgabe erfolgt hier für die obige ProductBean-Liste erfolgt nach GROUP BY-Kriterien, hier, wenn Sie die Eingabedaten sehen, die der Liste von ProductBean an Collections.sort (list, object of Comparator für Ihre erforderliche Spalte) gegeben werden. Dies wird basierend auf Ihrer Comparator-Implementierung sortiert und Sie können die GRUPPIERTEN Daten in der unteren Ausgabe sehen. Hoffe das hilft…
******** BEFORE GROUPING INPUT DATA LOOKS THIS WAY ******
ProductBean [P1 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P1 30 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P2 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P1 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P3 60 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P1 20 Mon Nov 17 09:31:01 IST 2014]
******** AFTER GROUP BY PRODUCT_ID ******
ProductBean [P1 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P1 30 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P1 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P1 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P2 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P3 60 Mon Nov 17 09:31:01 IST 2014]
******** AFTER GROUP BY PRICE ******
ProductBean [P1 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P1 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P2 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P1 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P1 30 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P3 60 Mon Nov 17 09:31:01 IST 2014]
Hallo, bitte posten Sie nicht dieselbe Antwort mehrmals und posten Sie bitte keinen Rohcode ohne eine Erklärung, wie er funktioniert und wie er das Problem in der obigen Frage löst.
– Matte
17. November 14 um 4:28 Uhr
Tut mir leid, Kumpel, beim Einfügen des Codes ist ein Fehler aufgetreten, da er möglicherweise mehrfach geworden ist. Ich habe die Erklärung für das, was ich gepostet habe, bearbeitet. Hoffe das sieht jetzt gut aus???
– Ravi Beli
17. November 14 um 12:58 Uhr
Mir fehlt etwas oder dieser Code sortiert anstatt nach einem Feld zu gruppieren? Ich sehe Produkte sortiert nach ID, dann nach Preis
– Geldgeber7
3. Juli 2020 um 16:19 Uhr
.
8223600cookie-checkGruppieren Sie eine Liste von Objekten nach einem Attributyes
Eine Hashmap mit dem Standort als Schlüssel und der Schülerliste als Wert.
– Omoro
10. Februar 14 um 13:26 Uhr
Würde die Sortierung nach Standort Ihr Problem lösen, oder gibt es noch etwas anderes?
– Kriegsherren
10. Februar 14 um 13:27 Uhr
Versuchen Sie es mit Comparator und sortieren Sie nach Standort.
– pshemek
10. Februar 14 um 13:28 Uhr
@Warlord Ja, aber ich gehe weiter, wenn ich Informationen wie die Anzahl der Schüler nach Standort benötige, besser, wenn ich sie gruppieren könnte
– Dilukshan Mahendra
10. Februar 14 um 13:28 Uhr
@Omoro Bitte können Sie mir einen Hinweis per Code geben, ich bin mit Hashmaps nicht so vertraut
– Dilukshan Mahendra
10. Februar 14 um 13:30 Uhr