业务需求如下
逻辑
根据姓名先进行分组,然后针对分组后的数据,进行过滤,过滤出不同学科的数据集然后求它们的分数之和返回就是该同学的该科总成绩了
import com.sun.org.apache.regexp.internal.RE;
import java.sql.SQLOutput;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Description
* @Author wfw
* @Date 2021/6/17 11:27
*/
public class StartTest {
public static void main(String[] args) {
List<Student> list=new ArrayList<Student>();
list.add(new Student("张三","语文",80, LocalDateTime.now()));
list.add(new Student("张三","数学",70, LocalDateTime.now()));
list.add(new Student("李四","语文",60, LocalDateTime.now()));
list.add(new Student("张三","英语",50, LocalDateTime.now()));
list.add(new Student("李四","数学",70, LocalDateTime.now()));
list.add(new Student("李四","英语",40, LocalDateTime.now()));
list.add(new Student("张三","语文",80, LocalDateTime.now()));
list.add(new Student("张三","数学",70, LocalDateTime.now()));
list.add(new Student("张三","英语",50, LocalDateTime.now()));
System.out.println("列表打印:");
list.forEach(c->{
System.out.println(c);
});
Map<String, Map<String, Object>> okmap = list.stream().collect(Collectors.groupingBy(Student::getName, Collectors.collectingAndThen(Collectors.toList(), m -> {
Map<String, Object> retMap = new HashMap<>();
int yw = m.stream().filter(mm -> mm.getXueKe().equals("语文")).mapToInt(mmm -> Integer.valueOf(mmm.getScore())).sum();
int sx = m.stream().filter(mm -> mm.getXueKe().equals("数学")).mapToInt(mmm -> Integer.valueOf(mmm.getScore())).sum();
int yy = m.stream().filter(mm -> mm.getXueKe().equals("英语")).mapToInt(mmm -> Integer.valueOf(mmm.getScore())).sum();
retMap.put("yws", yw);
retMap.put("sxs", sx);
retMap.put("yys", yy);
return retMap;
})));
System.out.println("计算后");
System.out.println(okmap);
}
}