Удалить элемент из списка объектов на основе значения списка внутренних объектов в java

Как я могу удалить элемент из списка, если какое-то значение атрибута внутреннего списка не соответствует условию. Хитрость здесь в том, что атрибут сам по себе является списком, а сравнение основано на каком-то атрибуте этого внутреннего списка. Пожалуйста, обратитесь к приведенному ниже образцу и помогите заполнить раздел комментариев в коде:

Объект:

Class product{
 private String productId;
 private String productName;
 private List<Attribute> attributeList;

    public static class Attribute{
        private Long attributeId;
    }
}

Класс водителя:

Class Driver{
   List<product> productList = new ArrayList<product>();
   /*
   Remove the object from productList if attributeList doesn't contain attribute with attributeId = x;
*/
}

person Nishant Varshney    schedule 18.02.2020    source источник


Ответы (2)


Что вы можете сделать, чтобы передать исходный список и оставить только объекты, удовлетворяющие условию. Это может выглядеть примерно так:

List<Product> filtered = productList.stream()
      .filter( p -> p.attributeList().stream().anyMatch( a -> a.attributeId.equals(x))
      .collect(Collectors.toList()) 

в этом эфире мы на самом деле проверяем, содержит ли вложенный список хотя бы один объект с attributeId = x p.attributeList().stream().anyMatch( a -> a.attributeId.equals(x)

person Anton Balaniuc    schedule 18.02.2020

Вы можете выполнить цикл foreach и удалить ненужные элементы. В классе «продукт» вы можете вставить функцию «FindInnerAtribute» для поиска в списке атрибутов и возврата true, если они есть.

List<product> productList = new ArrayList<product>();
for(product p : productList){
    if ( p.FindInnerAttribute(x) ){
        productList.remove(p);
    }
}

Как удалить из списка

person Moises Cavcalcanti    schedule 18.02.2020
comment
Вызов remove в списке во время его повторения не работает. В лучшем случае вы получите исключение. - person Holger; 18.02.2020