Atividade de vendas, preciso de ajuda, falta apenas a parte 4

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

import loja.Produto;
import loja.Venda;

public class MinhaLoja
{
    public static void main(String[] args) throws InterruptedException, IOException {

        int opcao;

        Scanner leia = new Scanner((System.in));

        ArrayList<Produto> produtos = new ArrayList<>();

        ArrayList<Venda> vendas1 = new ArrayList<>();

        do 
        {
            System.out.println("\n--------MENU DA LOJA--------\n");
            System.out.println("1 - Cadastre seu produto: ");
            System.out.println("2 - Consulte o produto(Código): ");
            System.out.println("3 - Listagem de produtos: ");
            System.out.println("4 - Vendas por período - Detalhado: ");
            System.out.println("5 - Realizar venda: ");
            System.out.println("0 - Sair");
            System.out.print("\nOpção: ");

            opcao = leia.nextInt();
            leia.nextLine();

            switch (opcao) 
            {
                case 1:
                System.out.println("\n********Cadastre seu produto aqui********\n");

                System.out.println("Informe o nome do produto: ");
                String nome = leia.nextLine();

                System.out.println("\nInforme o código do produto: ");
                String codigo = leia.nextLine();

                System.out.println("\nInforme o valor do produto: ");
                Double valor = leia.nextDouble();
                leia.nextLine();

                System.out.println("\nQuantidade no estoque: ");
                int qtdEstoque = leia.nextInt();
                leia.nextLine();
                voltarMenu(leia);

                Produto p = new Produto(codigo, nome, valor, qtdEstoque);

                produtos.add(p);
                    break;

                case 2:
                if (produtos.size() <= 0) {
                    System.out.println("\nNão há produtos cadastrados!!!");
                    voltarMenu(leia);
                    break;
                }

                    System.out.println("\n******Consultar produtos******\n");

                    System.out.println("Informe o código do produto que deseja consultar: ");
                    String codigo1 = leia.nextLine();

                    for (int i = 0; i < produtos.size(); ++i) {
                        Produto p1 = new Produto();
                        p1 = produtos.get(i);

                        if (codigo1.equals(p1.getCodigo())) {
                            System.out.println("\nProduto encontrado com sucesso!!!");
                            System.out.println(p1.toString()); 
                        } else if (codigo1 != p1.getCodigo()) {
                            System.out.println("\nCódigo inexistente! Tente novamente");
                        }
                    }
                    voltarMenu(leia);
                    break;

                case 3:
                    System.out.println("\n*******Todos os produtos cadastrados*******\n");

                    double v = 0;

                    for (int i = 0; i < produtos.size(); ++i) {
                        Produto p2 = new Produto();
                        p2 = produtos.get(i);
                        v = v + produtos.get(i).getValor();

                        System.out.println("\n-----------------------------");
                        System.out.printf(p2.toString());
                    }

                    double media = v / produtos.size();

                    System.out.printf("Está é a media: %s\n", media);

                    voltarMenu(leia);
                    break;

                case 4:
                    voltarMenu(leia);
                    break;

                case 5:
                System.out.println("\n------Fazer venda------\n");

                System.out.print("Código do produto a vender: ");
                String codVend = leia.nextLine();

                if (produtos.size() < 1)
                {
                    System.out.println("--------Não há produtos--------");;

                    break;
                }

                int i = -1;
                for (Produto p2 : produtos)
                {
                    if (p2.getCodigo().equals(codVend))
                    {
                        i = produtos.indexOf(p2);
                    }
                    if (i == -1)
                    {
                        System.out.println("Produto");
                        break;
                    }
                    System.out.printf("\n(QUANTIDADE DISPONÍVEL: %s un.)\n", produtos.get(i)
                    .getQtd());
                    System.out.printf("\nQuantidade de %s a vender: ", produtos.get(i).getNome());
                    int itens = leia.nextInt();
                    leia.nextLine();

                    Produto p3 = new Produto();
                    p3 = produtos.get(i);

                    if (itens > p3.getQtd())
                    {
                        System.out.println("\n-----Não há estoque-----");;
                        break;
                    }
                    System.out.printf("%s %s(s) vendido(a) com sucesso! \n", itens, produtos.get(i).getNome());

                    produtos.get(i).subtrairEstoque(itens);

                    Venda v1 = new Venda(itens, produtos.get(i));
                    vendas1.add(v1);
                }
                voltarMenu(leia);

                break;
            }

        } while (opcao != 0);

        System.out.println("Fim do programa!");

        leia.close();
    }

    private static void voltarMenu(Scanner in) throws InterruptedException, IOException {
        System.out.println("\nPressione ENTER para voltar ao menu.");
        in.nextLine();

        if (System.getProperty("os.name").contains("Windows"))
        new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
        else
        System.out.print("\033[H\033[2J");

        System.out.flush();
    }
}

E qual sua dificuldade exatamente?

Eu não consigo fazer o programa correr pelo ArrayList de Venda, para que ele consiga pegar o produto vendido, a data (que eu ainda preciso fazer) e a quantidade de vendas.