也許不是完美的做到這一點,但是這應該是接近你在找什麼。即使你沒有重寫「equals」方法,這也可以工作。
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));
}
}
好吧,你卡在什麼?你讀過Stream教程了嗎? https://docs.oracle.com/javase/tutorial/collections/streams/您還可以提供一個示例輸入/輸出嗎? – Tunaki
我指的是[這個例子](https://www.mkyong.com/java8/java-8-collectors-groupingby-and-mapping-example/)。如果我職業是學生的成員,那麼我可以這樣做: 'students.stream()。collect(Collectors.groupingBy(Student :: getVocational))' 但是當它不是時,我需要創建該類的對象,然後用等級和職業主題填充它。 不知道該怎麼做 – Akshay