1
votes

Java compare les éléments d'un tableau dans une arraylist

J'essaye de comparer les entrées avec les valeurs dans une arraylist.

[100,1102,14051,1024, / 142,1450,15121,1482,/ 141,1912,14924,1001] // the / represents each entry

Ex; J'ai une arraylist:

public compare(number)

Chaque index du tableau représente un attribut unique dans mon programme. Par exemple, l'index 0 représente user id , l'index 1 représente numéro de chambre etc. Si je fais arraylist.get (2) , il renvoie le deuxième tableau (142,1450,15121,1482).

J'essaye de comparez le nombre au 2ème élément de chaque tableau. Donc, disons que j'exécute ce compare (1102) , je veux qu'il itère à travers chaque [1] dans chaque tableau, et renvoie true s'il y a une correspondance à cet index.

Je veux donc qu'il compare le 'nombre' (1102) avec chaque 1er élément d'index (1102,1450,1912) et parce que 1102 est dans l'arraylist, renvoie true

I J'ai cherché et je n'ai pas trouvé comment mettre en œuvre cela, ou formuler la question de la bonne manière


3 commentaires

sur quoi êtes-vous coincé exactement? avez-vous du mal à obtenir la liste des utilisateurs de la liste principale?


Je ne sais pas comment accéder à chaque élément de l'arraylist. Si j'obtiens (0), la première liste est renvoyée. Comment puis-je accéder à des éléments individuels dans l'arraylist?


désolé d'avoir répondu si tard. Puisque arraylist.get (0) vous donne une ArrayList , vous pouvez alors utiliser un autre get () pour accéder à l'élément individuel (par exemple arraylist.get (0) .get (0) vous donnera le premier élément de la première liste)


3 Réponses :


1
votes

L'API Stream peut accomplir cela.

public class MyCompare 
{
    private static Optional<Integer> compare(Integer valueToCompare)
    {
        Optional<Integer[]> matchingArray = listToCompare.stream()
                .filter(eachArray -> eachArray[1].equals(valueToCompare))
                .findFirst();

        if(matchingArray.isPresent())
        {
            for(int i = 0; i < listToCompare.size(); i++)
            {
                if(listToCompare.get(i).equals(matchingArray.get()))
                {
                    return Optional.of(i);
                }
            }
        }

        return Optional.empty();
    }

    private static List<Integer[]> listToCompare = new ArrayList<>();

    public static void main(String[] args)
    {
        listToCompare.add(new Integer[] { 100, 1102, 14051, 1024 });
        listToCompare.add(new Integer[] { 142, 1450, 15121, 1482 });
        listToCompare.add(new Integer[] { 141, 1912, 14924, 1001 });

        Optional<Integer> listIndex = compare(1102);
        if(listIndex.isPresent())
        {
            System.out.println("Match found in list index " + listIndex.get());
        }
        else
        {
            System.out.println("No match found");
        }
    }
}

Correspondance trouvée dans l'index de liste 0


0 commentaires

0
votes

Le moyen le plus simple est d'utiliser une boucle for améliorée:

list.stream()       // converts the list into a Stream.
    .flatMap(...)   // can map each array in the list to its nth element.
    .anyMatch(...); // returns true if any value in the stream matches the Predicate passed.

La manière un peu plus avancée, mais beaucoup plus élégante, serait d'utiliser des flux:

for (int[] items : list) {
    // do your checking in here
}

API de flux: https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html


0 commentaires

0
votes

Parcourez votre liste et comparez tous les deux éléments:

public static boolean compare (int number){
    for( int i = 0; i<arraylist.size(); i++){
         if(number == arraylist.get(i)[1]){
            return true;
          }
     }
    return false;
 }


0 commentaires