也许不是完美的做到这一点,但是这应该是接近你在找什么。即使你没有重写“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