package streams;
import java.util.Arrays;
import java.util.List;
class Student{
String name;
int age;
String type;
public Student(){}
public Student(String name, int age, String type) {
this.name = name;
this.age = age;
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", type='" + type + '\'' +
'}';
}
public static List<Student> generateData() {
List<Student> st = Arrays.asList(new Student("Ashish", 27, "College"),
new Student("Aman", 24, "School"),
new Student("Rahul", 18, "School"),
new Student("Ajay", 29, "College"),
new Student("Mathur", 25, "College"),
new Student("Modi", 28, "College"),
new Student("Prem", 15, "School"),
new Student("Akash", 17, "School"));
return st;
}
}
//AdvancedStreamingP2 class uses the Student class
package streams;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import static java.util.Comparator.comparing;
import static java.util.stream.Collectors.*;
public class AdvancedStreamingP2 {
public static void main(String[] args) {
List<Student> studentList = Student.generateData();
System.out.println("\n---------- Extracting Student Name with Max Age by Type -----------");
Map<String, Optional<Student>> stuMax = studentList.stream().collect(groupingBy(Student::getType, maxBy(comparing(Student::getAge))));
stuMax.forEach((k, v) -> System.out.println("Key : " + k + ", Value :" + v.get()));
}
}
我想提取学生姓名,最大年龄,按类型分组学生。是否可以在“收集”本身中使用任何组合?
我想要这样的输出:
---------- Extracting Student Name with Max Age by Type -----------
Key : School, Value : Aman
Key : College, Value : Ajay