【问题标题】:Remove a element from List of objects based on inner object list value in java根据java中的内部对象列表值从对象列表中删除一个元素
【发布时间】:2020-06-02 19:06:28
【问题描述】:

如果某些内部列表属性值不满足条件,我如何从列表中删除元素。这里的技巧是属性本身就是一个列表,并且比较基于该内部列表的某些属性。请参考以下示例并帮助填写代码中的注释部分:

对象:

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;
*/
}

【问题讨论】:

  • productList.removeIf(p -&gt; p.getAttributeList().stream().map(Attribute::getAttributeId) .noneMatch(Predicate.isEqual​(x)));

标签: java arraylist collections java-8 remove-if


【解决方案1】:

你可以做什么来流过原始列表,只留下满足条件的对象。它可能看起来像这样:

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 -&gt; a.attributeId.equals(x)

【讨论】:

    【解决方案2】:

    您可以执行 foreach 循环并删除不需要的元素。在“product”类中,您可以插入一个“FindInnerAtribute”函数来在 Attributes 列表中进行搜索,如果有则返回 true。

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

    How to remove from list

    【讨论】:

    • 在您迭代列表时调用remove 已损坏。在最好的情况下,你会得到一个例外。
    猜你喜欢
    • 1970-01-01
    • 2018-07-08
    • 2016-11-14
    • 2019-07-02
    • 1970-01-01
    • 2020-09-06
    • 2020-11-07
    • 1970-01-01
    • 2021-07-11
    相关资源
    最近更新 更多