Como insiro um ArrayList dentro de uma função?

Queria saber? Como insiro um ArrayList dentro de uma função?
Exemplo:

  • Arr_add(Array, texto);

Eu quero retornar o Array sem repetir duas vezes a palavra Array.
Exemplo:

  • Array = Arr_add(Array, texto);

Veja o código abaixo:

import java.util.ArrayList;

public class xMain {
     public static void main(String[] args) {

        //ArrayList
        //add(Object o): adiciona à coleção o objeto passado como argumento.
        //size(): retorna o tamanho da coleção
        //get(int index): retorna um objeto dada uma posição.

        ArrayList<String> frutas1 = new ArrayList<String>();

        // adiciona itens na lista
        frutas1.add("Banana");
        frutas1.add("Melão");
        frutas1.add("Goiaba");
        frutas1.add("Morango");

        // exibe os valores da lista
        for(int i = 0; i < frutas1.size(); i++){
                System.out.println(frutas1.get(i));
        }

        System.out.println();

        //add(int index, Object element): adiciona um objeto dada uma posição.

        ArrayList<String> frutas2 = new ArrayList<String>();

        // adiciona itens na lista
        frutas2.add("Banana");
        frutas2.add("Melão");
        frutas2.add("Goiaba");
        frutas2.add("Morango");

        frutas2.add(1, "======");

        // exibe os valores da lista
        for(int i = 0; i < frutas2.size(); i++){
                System.out.println(frutas2.get(i));
        }

        System.out.println();

        //set(int index, Object element): edita um objeto dada uma posição.

        ArrayList<String> frutas3 = new ArrayList<String>();

        // adiciona itens na lista
        frutas3.add("Banana");
        frutas3.add("Melão");
        frutas3.add("Goiaba");
        frutas3.add("Morango");

        frutas3.set(1, "======");

        // exibe os valores da lista
        for(int i = 0; i < frutas3.size(); i++){
                System.out.println(frutas3.get(i));
        }

        System.out.println();

        //remove(int index): remove um objeto dada sua posição.

        ArrayList<String> frutas4 = new ArrayList<String>();

        // adiciona itens na lista
        frutas4.add("Banana");
        frutas4.add("Melão");
        frutas4.add("Goiaba");
        frutas4.add("Morango");

        frutas4.remove(1);

        // exibe os valores da lista
        for(int i = 0; i < frutas4.size(); i++){
                System.out.println(frutas4.get(i));
        }

        System.out.println();

        //clear(): apaga todo o conteúdo da coleção.

        ArrayList<String> frutas5 = new ArrayList<String>();

        // adiciona itens na lista
        frutas5.add("Banana");
        frutas5.add("Melão");
        frutas5.add("Goiaba");
        frutas5.add("Morango");

        frutas5.clear();

        // exibe os valores da lista
        for(int i = 0; i < frutas5.size(); i++){
                System.out.println(frutas5.get(i));
        }

        System.out.println();

        //boolean contains(Object o): verifica se o objeto passado como argumento existe na coleção.

        ArrayList<String> lista1 = new ArrayList<String>();
        lista1.add("Jose");
        lista1.add("Maria");
        System.out.println(lista1.contains("Jose")); // True

        System.out.println();

        //Object[ ] toArray(): converte os elementos da coleção em um array (rápidos acesso aos elementos).

        ArrayList<String> lista2 = new ArrayList<String>();
        lista2.add("Jose");
        lista2.add("Maria");
        lista2.add("Joao");
        Object[] elementos2 = lista2.toArray();
        for(int i=0; i<elementos2.length;i++) {
                System.out.println(elementos2[i]);
        }

        System.out.println();

        //int indexOf (Object o): retorna a posição de um objeto.

        ArrayList<String> lista3 = new ArrayList<String>();
        lista3.add("Jose");
        lista3.add("Maria");
        lista3.add("João");
        System.out.println(lista3.indexOf("Maria")); //1

        System.out.println();

        //int lastIndexOf (Object o): retorna o último índice de um objeto.

        ArrayList<String> lista4 = new ArrayList<String>();
        lista4.add("Jose");
        lista4.add("Maria");
        lista4.add("João");
        lista4.add("Maria");
        System.out.println(lista4.lastIndexOf("Maria")); //3

        System.out.println();
     }
}

No seu código, que parece ser algo que você está fazendo para estudar, você está testando e documentando os métodos da classe ArrayList, certo?

Não entendi exatamente o que você quer fazer. O que você está chamando de função? Você quer criar um método que adicione um elemento no ArrayList, desde que ele não exista? Fica difícil de ajudar se você não consegue explicar o que precisa ou quer fazer.

Por Exemplo:


        //set(int index, Object element): edita um objeto dada uma posição.

        ArrayList<String> frutas3 = new ArrayList<String>();

        // adiciona itens na lista
        frutas3.Arr_add("Banana");
        frutas3.Arr_add("Melão");
        frutas3.Arr_add("Goiaba");
        frutas3.Arr_add("Morango");

        frutas3.Arr_set(1, "======");

        // exibe os valores da lista
        for(int i = 0; i < frutas3.Arr_size(); i++){
                System.out.println(frutas3.Arr_get(i));
        }

Ou melhor ainda? Quero deste geito?


        //set(int index, Object element): edita um objeto dada uma posição.

        ArrayList<String> frutas3 = new ArrayList<String>();

        // adiciona itens na lista
        Arr_add(frutas3, "Banana");
        Arr_add(frutas3, "Melão");
        Arr_add(frutas3, "Goiaba");
        Arr_add(frutas3, "Morango");

        Arr_set(frutas3, 1, "======");

        // exibe os valores da lista
        for(int i = 0; i < Arr_size(frutas3); i++){
                System.out.println(Arr_get(frutas3, i));
        }

Você quer modificar o valor em um indice da lista?
Não seria melhor usar:

    String[] frutas3 = new String[4];
    frutas3[0] = "Banana";

E por que vc quer desse jeito?

Os métodos add e set já fazem o que vc precisa, não tem porque criar outro método pra fazer a mesma coisa.

Até daria pra criar tais métodos:

public static void arrAdd(List<String> lista, String valor) {
    lista.add(valor);
}

public static void arrSet(List<String> lista, int i, String valor) {
    lista.set(i, valor);
}

public static String arrGet(List<String> lista, int i) {
    return lista.get(i);
}

public static void main(String[] args) throws Exception {
    List<String> frutas3 = new ArrayList<>();

    // adiciona itens na lista
    arrAdd(frutas3, "Banana");
    arrAdd(frutas3, "Melão");
    arrAdd(frutas3, "Goiaba");
    arrAdd(frutas3, "Morango");
    arrSet(frutas3, 1, "======");

    // exibe os valores da lista
    for (int i = 0; i < frutas3.size(); i++) {
        System.out.println(arrGet(frutas3, i));
    }
}

Mas na boa, neste caso específico não vejo ganho nenhum.

Ah, repare que no exemplo acima usei as convenções de código do Java (método começa com letra minúscula, sem _ para separar as palavras, etc).

Estou desenvolvendo o projeto Open Source Megusta vai facilitar a vida do Programador!
União das linguagens de programação Java, Javascript, PHP, Python, Clipper, Rust, C/C++, ASSEMBLY e WebAssembly.
Veja o link abaixo:
https://iatagancursos.github.io/Megusta/pagina-principal.html

:face_with_peeking_eye:

Mas ainda não ficou claro o que vc quis dizer com:

Seria poder chamar algo como frutas3.add("Banana").add("Melão") etc?

Se for isso (e isso é um grande chute, se não for favor esclarecer melhor), não precisa complicar, vc pode passar todos os valores de uma vez:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Teste {
    public static void main(String[] args) throws Exception {
        List<String> frutas3 = new ArrayList<>();

        // adiciona tudo de uma vez
        Collections.addAll(frutas3, "Banana", "Melão", "Goiaba", "Morango");
        frutas3.set(1, "======");

        for (String fruta : frutas3) {
            System.out.println(fruta);
        }
    }
}

E repare também que para imprimir vc pode usar o enhanced for.

Outra coisa não relacionada: vi que no seu projeto vc usa java.util.Calendar para datas e horas. Mas essa API está ultrapassada, pois desde o Java 8 (lançado em 2014) existe uma API nova e muito melhor, o java.time.

Dê uma olhada no tutorial oficial, e também no meu blog, que tem alguns posts sobre o assunto :slight_smile:

Como é que crio um método que insere uma lista infinita de Array, numa única função?
Exemplo:

    public void arrAddAll(List<String> lista, String valor) {
        Collections.addAll(lista, valor);
    }

Resultado:

        List<String> frutasx = new ArrayList<>();

        // adiciona itens na lista
        arrAddAll(frutasx, "Banana", "Melão", "Goiaba", "Morango");

        // exibe os valores da lista
        for(int i = 0; i < r.arrSize(frutasx); i++){
                System.out.println(r.arrGet(frutasx, i));
        }

Aí que tá, não precisa criar esse método porque ele já existe. Collections.addAll já faz o que vc precisa. Olha o exemplo que eu fiz antes:

Collections.addAll(frutas3, "Banana", "Melão", "Goiaba", "Morango");

Até daria pra fazer algo como:

public static <T> void arrAddAll(List<T> list, T... elements) {
    Collections.addAll(list, elements);
}

public static void main(String[] args) throws Exception {
    List<String> frutas3 = new ArrayList<>();
    arrAddAll(frutas3, "Banana", "Melão", "Goiaba", "Morango");

    for (String f : frutas3) {
        System.out.println(f);
    }
}

Mas pra que criar outro método que só vai repassar isso pra Collections.addAll, se vc pode chamar Collections.addAll diretamente?

Uma última dúvida?
Como converto função infinita no exemplo abaixo?

    public double mathMaxArr(double ... numero){
        return Math.max(numero);
    }
    public double mathMinArr(double ... numero){
        return Math.min(numero);
    }

Resultado:

//Math.max

        // Encontrar o máximo entre dois números de ponto flutuante
        maximoDouble = r.mathMaxArr(15.5, 12.3, 10.8, 14.6);
        System.out.println("Máximo entre 15.5, 12.3, 10.8, 14.6 = " + maximoDouble);

//Math.min

        // Encontrar o mínimo entre dois números de ponto flutuante
        minimoDouble = r.mathMinArr(15.5, 12.3, 10.8, 14.6);
        System.out.println("Mínimo entre 15.5, 12.3, 10.8, 14.6 = " + minimoDouble);

Pode usar java.util.Arrays:

public static double max(double... values) {
    return Arrays.stream(values).max().getAsDouble();
}

Ou fazer manualmente:

public static double max(double... values) {
    double max = values[0];
    for (int i = 1; i < values.length; i++) {
        if (values[i] > max) {
            max = values[i];
        }
    }
    return max;
}

E isso não se chama “função infinita”. Este recurso de ter uma quantidade variável de argumentos se chama varargs.

De qualquer forma, em computação nada é infinito. Existem limites para tudo, inclusive para varargs.

Esta postagem foi sinalizada pela comunidade e está oculta temporariamente.

Esta postagem foi sinalizada pela comunidade e está oculta temporariamente.