JavascriptProva

martedì 20 settembre 2016

Matching di un elemento in un ArrayList.

E adesso sarebbe il caso di completare l'opera e studiare come trovare un elemento in un ArrayList.
Meglio: come vedere se una parola si trova in una lista di tipo ArrayList.

Isoliamo il problema.
Creiamo un'ArrayList di stringhe con un elenco banale, i nomi dei sette nani.
        ArrayList lista=new ArrayList();
        lista.add("Gongolo");
        lista.add("Mammolo");
        lista.add("Pisolo");
        lista.add("Cucciolo");
        lista.add("Dotto");
        lista.add("Eolo");
        lista.add("Brontolo");
Ora ho cercato su Google le parole chiave "matches" e "ArrayList", e ho trovato alcuni costrutti, interessanti da ricordare, che metto in pratica subito. In particolare, il metodo contains di ArrayList è molto utile allo scopo.
public class MainActivity extends AppCompatActivity {

    Button button;
    ArrayList<String> lista;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button)findViewById(R.id.button);

        lista=new ArrayList<String>();
        lista.add("Gongolo");
        lista.add("Mammolo");
        lista.add("Pisolo");
        lista.add("Cucciolo");
        lista.add("Dotto");
        lista.add("Eolo");
        lista.add("Brontolo");

        button.setOnClickListener(new Button.OnClickListener(){

            @Override
            public void onClick(View view) {
                if(lista.contains("Cuccolo")){
                    Toast.makeText(getApplicationContext(),"CONTIENE!",Toast.LENGTH_LONG).show();
                }else{
                    Toast.makeText(getApplicationContext(),"NON CONTIENE!",Toast.LENGTH_LONG).show();
                }
            }
        });
    }
} 
Cambiando "Cucciolo" in "Cuccolo", la risposta cambia: nel primo caso è "CONTIENE" mentre nel secondo è "NON CONTIENE".
Un altro costrutto è questo:
public class MainActivity extends AppCompatActivity {

    Button button;
    ArrayList<String> lista;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button)findViewById(R.id.button);

        lista=new ArrayList<String>();
        lista.add("Gongolo");
        lista.add("Mammolo");
        lista.add("Pisolo");
        lista.add("Cucciolo");
        lista.add("Dotto");
        lista.add("Eolo");
        lista.add("Brontolo");

        button.setOnClickListener(new Button.OnClickListener(){

            @Override
            public void onClick(View view) {
                for(String s : lista){
                    if(s.equals("Cucciolo"))
                        Toast.makeText(getApplicationContext(),"CONTIENE!",Toast.LENGTH_LONG).show();
                    else
                        Toast.makeText(getApplicationContext(),"NON CONTIENE!",Toast.LENGTH_LONG).show();
                }
            }
        });
    }
} 
Con questo costrutto posso ottenere risultati ingannevoli: se predispongo, come in questo caso, una risposta anche in caso di esito negativo, ottengo il risultato dell'ultimo elemento della lista esaminato, quindi posso avere una segnalazione di "non presente" se solo l'ultimo elemento esaminato è diverso da quello che io sto cercando.
Predisponendo solo la risposta in caso positivo, invece, ottengo una risposta pertinente.

Nessun commento:

Posta un commento