Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import java.util.function.Supplier;
- import java.util.stream.Collectors;
- import java.util.stream.Stream;
- class Student {
- private String index;
- private List<Subject> subjects;
- public Student(String[] headerParts, String[] rowParts) {
- subjects = new ArrayList<>();
- index = rowParts[0];
- for (int i = 1; i < headerParts.length; i++) {
- subjects.add(new Subject(headerParts[i], Integer.valueOf(rowParts[i])));
- }
- }
- public double getAverage() {
- return subjects.stream()
- .mapToDouble(x -> x.getGrade())
- .average()
- .orElse(0);
- }
- public List<Subject> getSubjects() {
- return subjects;
- }
- @Override
- public String toString() {
- return String.format("%s\t%.2f", index, getAverage());
- }
- }
- class Subject {
- private String name;
- private Integer grade;
- public Subject(String name, Integer grade) {
- this.name = name;
- this.grade = grade;
- }
- public int getGrade() {
- return grade.intValue();
- }
- public String getName() {
- return name;
- }
- @Override
- public String toString() {
- return String.format("%s\t%d", name, grade);
- }
- }
- public class HW01_5 {
- public static void main(String[] args) throws IOException {
- BufferedReader reader = new BufferedReader(new FileReader("rezultati.csv"));
- String[] headerParts = reader.readLine().split(",");
- Supplier<Stream<String>> lines = () -> reader.lines();
- List<Student> students = lines.get()
- .map(l -> l.split(","))
- .map(rowParts -> new Student(headerParts, rowParts))
- .collect(Collectors.toList());
- System.out.println("Index\tAverage");
- students.stream()
- .forEach(System.out::println);
- System.out.println("\nCourseName\tAverage");
- students.stream()
- .flatMap(f -> f.getSubjects().stream())
- .collect(Collectors.groupingBy(Subject::getName, Collectors.averagingDouble(Subject::getGrade)))
- .forEach((name, average) -> System.out.println(String.format("%s\t%12.2f", name, average)));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment