为了账号安全,请及时绑定邮箱和手机立即绑定

查找列表的对象是否存在于另一个列表中

查找列表的对象是否存在于另一个列表中

桃花长相依 2021-07-01 06:01:50
我有两个列表List<AreaOfInterest>和List<AreaOfInterestBean>. 对应的类是,@Entity@Data@Table( name = "interest_area" )public class AreaOfInterest {    @Id    @GeneratedValue( strategy = GenerationType.AUTO )    @Column( name = "ia_id" )    private Long id;    @Column( name = "ia_value" )    private String value;    @Column( name = "ia_is_active" )    private Boolean isActive;    @Column( name = "ia_created_at" )    private Calendar createdAt;    @Column( name = "ia_is_approved" )    private Boolean isApprovedByAdmin;    @Column( name = "ia_approved_at" )    private Calendar approvedAt;}和,@Datapublic class AreaOfInterestBean {    private Long id;    private String value;    private boolean isSelected;}我想检查 的对象List<AreaOfInterest>是否存在List<AreaOfInterestBean>,如果存在,我需要更新List<AreaOfInterestBean>. 现在,我觉得我必须迭代两个列表来解决这个问题。有什么有效的方法吗?
查看完整描述

2 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

老实说,我不确定这的复杂性(我明天会尝试弄清楚):


Set<String> left = nonBeans.stream()

            .map(AreaOfInterest::getValue)

            .collect(Collectors.toSet());


beans.stream()

      .filter(x -> left.contains(x.getValue()))

      .forEach(x -> x.setSelected(true));

在这种情况下,复杂性将为O(n).


查看完整回答
反对 回复 2021-07-14
?
ibeautiful

TA贡献1993条经验 获得超5个赞

假设:


List<AreaOfInterest> list = /* ... */

List<AreaOfInterestBean> listOfBeans = /* ... */

两个简单的迭代可以轻松实现:


for (int i=0; i<listOfBeans.size(); i++) {                // Iterate beans

    AreaOfInterestBean aoiBean = listOfBeans.get(i);      // Get each bean

    for (int j=0; j<list.size(); j++) {                   // Iterate entity

        AreaOfInterest aoi = list.get(j);                 // Get each entity

        if (aoiBean.getId() == aoi.getId()) {             // If they have the same ID

            aoiBean.setValue(aoi.getValue());             // Update the bean value

            break;                                        // Go to the next bean

        }

    }

}

示例:具有以下简化数据:


AreaOfInterest同id和value:1, "Car",2, "Bike",3, "Ship"

AreaOfInterestBeans同id和value:5, "Limo",2, "Scooter",7, "Yacht"

结果AreaOfInterestBeans将是 id 的替换值2:Scooter-> Bike。


AreaOfInterestBeans同id和value:5, "Limo",2, "Bike",7, "Yacht"

另一种流方式:


listOfBeans = listOfBeans.stream()

                  .peek(aoiBean -> list.stream()

                                       .filter(aoi -> aoi.getId() == aoiBean.getId())

                                       .findFirst()

                                       .ifPresent(i -> aoiBean.setValue(i.getValue())))

                  .collect(Collectors.toList());


查看完整回答
反对 回复 2021-07-14
  • 2 回答
  • 0 关注
  • 174 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信