nicht perfekt sein, aber dies sollte zu schließen sein, was Sie suchen. Dies funktioniert auch, wenn Sie die Methode "equals" nicht überschrieben haben.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
class Student
{
String name;
String grade;
String vocationalSubject;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public String getVocationalSubject() {
return vocationalSubject;
}
public void setVocationalSubject(String vocationalSubject) {
this.vocationalSubject = vocationalSubject;
}
Student(String name,String grade,String vocSub)
{
this.name=name;
this.grade=grade;
this.vocationalSubject=vocSub;
}
@Override
public String toString() {
return "Student [name=" + name + ", grade=" + grade + ", vocationalSubject=" + vocationalSubject + "]";
}
}
class Vocational
{
String grade;
String vocationalSubject;
public Vocational(String grade, String vocationalSubject) {
this.grade = grade;
this.vocationalSubject = vocationalSubject;
}
@Override
public String toString() {
return "Vocational [grade=" + grade + ", vocationalSubject=" + vocationalSubject + "]";
}
}
public class Temp
{
public static void main(String args[]){
Map<Vocational,List<Student>> map=new HashMap<Vocational,List<Student>>();
List<Student> listStu=new ArrayList<Student>();
listStu.add(new Student("Student1","100","aa"));
listStu.add(new Student("Student1","100","bb"));
listStu.add(new Student("Student2","50","aa"));
listStu.add(new Student("Student2","50","bb"));
listStu.add(new Student("Student3","100","aa"));
listStu.add(new Student("Student3","50","bb"));
listStu.add(new Student("Student4","50","aa"));
listStu.add(new Student("Student4","100","bb"));
listStu.stream().collect(Collectors.groupingBy(Student::getGrade,Collectors.groupingBy(Student::getVocationalSubject)))
.forEach((k,v)->v.forEach((x,y)->map.put(new Vocational(k, x), y)));
map.forEach((x,y)->System.out.println(x+":"+y));
}
}
Ok und was stecken Sie fest? Hast du das Stream-Tutorial gelesen? https://docs.oracle.com/javase/tutorial/collections/streams/ Können Sie auch eine Beispieleingabe/-ausgabe geben? – Tunaki
Ich bezog mich auf [dieses Beispiel] (https://www.mkyong.com/java8/java-8-collectors-groupingby-and-mapping-example/). Wenn ich Beruf als Mitglied des Studenten habe, dann kann ich tun: 'students.stream(). Sammeln (Collectors.groupingBy (Student :: getVocational))' Aber wenn es nicht ist, muss ich erstellen Objekt dieser Klasse und bevölkern sie dann mit grade und professionalSubject. Nicht sicher, wie man das macht – Akshay