Мне нужно суммировать определенные элементы в ArrayList

Допустим у меня есть такой список. Он у меня записывается в файл. Мне нужно написать код, который мог бы суммировать количество изделий всех категорий(A, B, C) определенной бригады. Допустим я указываю в консоли "Бригада 1", и он суммирует все собранные Бригадой 1 изделия всех категорий. Например, сумма всех собранных изделий Бригады 1: 1290 (200+250+240+60+210+80+90+75+85)

//создал вспомогательные массивы
public static ArrayList<Integer> bookCount = new ArrayList<>();
public static ArrayList<Integer> after2015 = new ArrayList<>();
public static ArrayList<List> list2 = new ArrayList<>();
public static ArrayList<ABC> abcs = new ArrayList<ABC>();

public static void main(String[] args) throws IOException {
    BufferedReader bufferedReader = null;
    ArrayList list = new ArrayList();
    try {
        File file = new File("newFile.txt");
        if (!file.exists()) file.createNewFile();//если файла не существует, то создаем
        PrintWriter printWriter = new PrintWriter(file);//выделяем память для PrintWriter
        //записываем данные
        printWriter.print("Иванов\n" +
                "Бригада 1\n" +
                "200\n" +
                "250\n" +
                "240\n" +
                "Масляков\n" +
                "Бригада 1\n" +
                "60\n" +
                "210\n" +
                "80\n" +
                "Соловьев\n" +
                "Бригада 1\n" +
                "90\n" +
                "75\n" +
                "85\n" +
                "Муравьев\n" +
                "Бригада 2\n" +
                "150\n" +
                "300\n" +
                "205\n" +
                "Тополев\n" +
                "Бригада 2\n" +
                "160\n" +
                "95\n" +
                "140\n" +
                "Карпенко\n" +
                "Бригада 2\n" +
                "170\n" +
                "195\n" +
                "145");
        printWriter.close();//закрываем PrintWriter
        //для чтения создаем BufferReader
        bufferedReader = new BufferedReader(new FileReader("newFile.txt"));
        String line;
        //пока есть что для чтения,все строки добавляем в массив
        while ((line = bufferedReader.readLine()) != null) {
            list.add(line);
        }
        //Делим список по 5 элементов(шифр,автор,название,год,количество)
        int size = 5;
        for (int start = 0; start < list.size(); start += size) {
            int end = Math.min(start + size, list.size());
            List sublist = list.subList(start, end);
            list2.add(sublist);
        }

    } catch (FileNotFoundException e) {
        System.out.println("Error: " + e);//При ошибке
    } catch (IOException e) {
        System.out.println("Error: " + e);//При ошибке
    } finally {
        try {
            bufferedReader.close();
        } catch (IOException e) {
            System.out.println("Error: " + e);
        }
    }
    for (int i = 0; i < list2.size(); i++) {
        System.out.println(list2.get(i));
    }
    list2.forEach((l) -> {
        System.out.println(l.get(1));
        ABC abc = new ABC();
        abc.setFamilia((String) l.get(0));
        abc.setBrigada((String) l.get(1));
        abc.setIzdelieA(Integer.parseInt(l.get(2).toString()));
        abc.setIzdelieB(Integer.parseInt(l.get(3).toString()));
        abc.setIzdelieC(Integer.parseInt(l.get(4).toString()));
        abcs.add(abc);
    });
    System.out.println(abcs);

Есть следующие переменные, геттеры и сеттеры

public static class ABC {
    String familia;
    String brigada;
    int izdelieA;
    int izdelieB;
    int izdelieC;

    public ABC() {
    }

    public String getFamilia() {
        return familia;
    }

    public void setFamilia(String fam) {
        this.familia = fam;
    }

    public String getBrigada() {
        return brigada;
    }

    public void setBrigada(String brgd) {
        this.brigada = brgd;
    }

    public int getIzdelieA() {
        return izdelieA;
    }

    public void setIzdelieA(int izdA) {
        this.izdelieA = izdA;
    }
    public int getIzdelieB() {
        return izdelieB;
    }

    public void setIzdelieB(int izdB) {
        this.izdelieB = izdB;
    }

    public int getIzdelieC() {
        return izdelieC;
    }

    public void setIzdelieC(int izdC)
    {
        this.izdelieC = izdC;
    }
}

Ответы (1 шт):

Автор решения: Дмитрий

Я не знаю, в чем именно возникла проблема при решении задачи, но лично у меня написание данного кода заняло примерно 7-10 минут. Знаете почему? Потому что я его не писал с самого начала, я использовал уже существующий код. Посмотрите ссылки, которые я вам предоставлю. Я отвечал на очень похожие вопросы и это решение переиспользует указанный код с минимальными модификациями. Писать пояснения к этому коду я не буду, потому что все уже расписано по по указанным ссылкам. Мне кажется, что если бы вы воспользовались поисковиком, то могли бы таким же способом решить данную задачу. Итак, вот решение:

@lombok.Builder
@lombok.AllArgsConstructor
@lombok.ToString
@lombok.Getter
public class Worker implements CsvStore{

    private final String surname;
    private final String teamName;
    private final int productA;
    private final int productB;
    private final int productC;

    public Worker(String [] values) {
        this.surname = values[0];
        this.teamName = values[1];
        this.productA = Integer.valueOf(values[2]);
        this.productB = Integer.valueOf(values[3]);
        this.productC = Integer.valueOf(values[4]);
    }

    public long sumProduct(){
        return productA + productB + productC;
    }

    @Override
    public String toCsv(String delimiter){
        final StringBuilder sb = new StringBuilder();
        return sb.append(surname).append(delimiter)
                .append(teamName).append(delimiter)
                .append(productA).append(delimiter)
                .append(productB).append(delimiter)
                .append(productC).append(delimiter)
                .toString();
    }

}

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Collection;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

@FunctionalInterface
public interface CsvStore {

    public static <T extends CsvStore> void save(String fileName, Collection<T> collection, String delimiter) throws IOException {
        Files.write(Paths.get(fileName), collection.stream()
                        .map(e->e.toCsv(delimiter))
                        .collect(Collectors.joining("\r\n")).getBytes());
    }

    public static <T extends CsvStore> List<T> load(String fileName, 
            String delimiter, Function <String[], T> function) throws IOException {        
        try (Stream<String> stream = Files.lines(Paths.get(fileName), Charset.defaultCharset())) {            
            return stream.map(line -> function.apply(line.split(delimiter)))
                    .collect(Collectors.toList());
        }
    }

    public String toCsv(String delimiter);

}

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

    private static final String FILE_NAME = "Workers.txt";
    private final static String DELIMITER = ";";

    public static void main(String[] args) throws IOException {

        List<Worker> workers = new ArrayList<>();        
        workers.add(Worker.builder().surname("Иванов").teamName("Бригада 1").productA(200).productB(250).productC(240).build());
        workers.add(Worker.builder().surname("Масляков").teamName("Бригада 1").productA(60).productB(210).productC(80).build());
        workers.add(Worker.builder().surname("Соловьев").teamName("Бригада 1").productA(90).productB(75).productC(85).build());
        workers.add(Worker.builder().surname("Муравьев").teamName("Бригада 2").productA(150).productB(300).productC(205).build());
        workers.add(Worker.builder().surname("Тополев").teamName("Бригада 2").productA(160).productB(95).productC(140).build());
        workers.add(Worker.builder().surname("Карпенко").teamName("Бригада 2").productA(170).productB(195).productC(145).build());

        CsvStore.save(FILE_NAME, workers, DELIMITER);

        workers = CsvStore.load(FILE_NAME, DELIMITER, values -> new Worker(values));

        Scanner sc = new Scanner(System.in);
        String teamName = sc.nextLine();

        long sum = workers.stream()
                .filter(worker->teamName.equals(worker.getTeamName()))
                .map(worker->worker.sumProduct())
                .mapToLong(Long::valueOf)
                .sum();        
        System.out.println(sum);

    }

}

А ссылки в комментариях к ответу.

→ Ссылка