how to write below logic in java 8 using stream API?

Viewed 43

I have below arrayList. I want to add student Object if studentname is same. Example if studentname is rahul I want to add 24+25. I can do it without using stream. How to do it with stream API in java 8 ? I want answer in key value pair.

Map<String, Integer> map1 = new HashMap<String, Integer>();
List<Student> arraylist = new ArrayList<Student>();
arraylist.add(new Student(223, "Chaitanya", 26));
arraylist.add(new Student(245, "Rahul", 24));
arraylist.add(new Student(246, "Rahul", 25));

Student class contains these property:

    private String studentname;
    private int rollno;
    private int studentmarks;
1 Answers

Using Java 8 stream API ::

Please find the code below:

Student.java

public class Student {

  private String studentName;
  private int rollNo;
  private int studentMarks;

  public Student(String studentName, int rollNo, int studentMarks) {
    this.studentName = studentName;
    this.rollNo = rollNo;
    this.studentMarks = studentMarks;
  }

  public String getStudentName() {
    return studentName;
  }

  public void setStudentName(String studentName) {
    this.studentName = studentName;
  }

  public int getRollNo() {
    return rollNo;
  }

  public void setRollNo(int rollNo) {
    this.rollNo = rollNo;
  }

  public int getStudentMarks() {
    return studentMarks;
  }

  public void setStudentMarks(int studentMarks) {
    this.studentMarks = studentMarks;
  }

  @Override
  public String toString() {
    return "Student{" +
        "studentName='" + studentName + '\'' +
        ", rollNo=" + rollNo +
        ", studentMarks=" + studentMarks +
        '}';
  }

Test.java

public class Test {
  public static void main(String[] args) {
    Student s1 = new Student("Rahul",101,320);
    Student s2 = new Student("Rahul",102,420);
    Student s3 = new Student("Mohit",103,520);
    Student s4 = new Student("Rohit",104,620);
    Student s5 = new Student("Mohit",105,720);

    List<Student> studentList = Arrays.asList(s1,s2,s3,s4,s5);

    Map<String,Integer> map =
        studentList.stream().collect(Collectors.groupingBy(Student::getStudentName,
        LinkedHashMap::new,Collectors.summingInt(Student::getStudentMarks)));

    System.out.println(map);
  }

Output:

{Rahul=740, Mohit=1240, Rohit=620}
Related