118 votes

Comment trouver un objet dans un ArrayList par propriété

Comment puis-je trouver un objet, Carnet dans un ArrayList<Carnet> connaître sa propriété codeIsin .

List<Carnet> listCarnet = carnetEJB.findAll();

public class Carnet {

    private String codeTitre;
    private String nomTitre;
    private String codeIsin;

    // Setters and getters

}

2voto

savac Points 180

Voici une autre solution utilisant Goyave sur Java 8 qui renvoie l'élément correspondant s'il existe dans la liste. Si plusieurs éléments correspondent, le collecteur lève une IllegalArgumentException. A null est retourné s'il n'y a pas de correspondance.

Carnet carnet = listCarnet.stream()
                    .filter(c -> c.getCodeIsin().equals(wantedCodeIsin))
                    .collect(MoreCollectors.toOptional())
                    .orElse(null);

1voto

user1084363 Points 25

Suite à la réponse d'Oleg, si vous souhaitez trouver TOUTES dans un Liste filtré par une propriété, vous pourriez faire quelque chose comme :

//Search into a generic list ALL items with a generic property
public final class SearchTools {
       public static <T> List<T> findByProperty(Collection<T> col, Predicate<T> filter) {
           List<T> filteredList = (List<T>) col.stream().filter(filter).collect(Collectors.toList());
           return filteredList;
     }

//Search in the list "listItems" ALL items of type "Item" with the specific property "iD_item=itemID"
public static final class ItemTools {
         public static List<Item> findByItemID(Collection<Item> listItems, String itemID) {
             return SearchTools.findByProperty(listItems, item -> itemID.equals(item.getiD_Item()));
         }
     }
}

et de la même manière si vous voulez filtrer TOUTES articles dans un HashMap avec une certaine propriété

//Search into a MAP ALL items with a given property
public final class SearchTools {
       public static <T> HashMap<String,T> filterByProperty(HashMap<String,T> completeMap, Predicate<? super Map.Entry<String,T>> filter) {
           HashMap<String,T> filteredList = (HashMap<String,T>) completeMap.entrySet().stream()
                                .filter(filter)
                                .collect(Collectors.toMap(map -> map.getKey(), map -> map.getValue()));
           return filteredList;
     }

     //Search into the MAP ALL items with specific properties
public static final class ItemTools {

        public static HashMap<String,Item> filterByParentID(HashMap<String,Item> mapItems, String parentID) {
            return SearchTools.filterByProperty(mapItems, mapItem -> parentID.equals(mapItem.getValue().getiD_Parent()));
        }

        public static HashMap<String,Item> filterBySciName(HashMap<String,Item> mapItems, String sciName) {
            return SearchTools.filterByProperty(mapItems, mapItem -> sciName.equals(mapItem.getValue().getSciName()));
        }
    }

-1voto

Prasad Kharkar Points 7611

Pour trouver les objets qui sont significativement égaux, vous devez remplacer equals y hashcode pour la classe. Vous pouvez trouver un bon tutoriel ici.

http://www.thejavageek.com/2013/06/28/significance-of-equals-and-hashcode/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X