如何比较列表中的某个字段并将其值插入另一个列表中?

问题描述

我有两个列表,第一个List<ClassOne>,第二个是 List<Classtwo>。 ClassOne 具有以下字段:

ClassOne:

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Builder
public class ClassOne {
    private Integer idToInsert;
    private String fieldToCompare;
    private List<AnotherClass> anotherClass;
}

Classtwo 有以下字段:

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Builder
public class Classtwo {

    private Integer idToInsert;
    private String fieldToCompare;

}

我有这两个列表 List<ClassOne>List<Classtwo>Classtwo 包含 idToInsert 字段,当两个类中的 ClassOne 字段相同时,该字段必须插入到 fieldToCompare 中。

类似的东西

if(classtwo.getFieldToCompare.equals(classOne.getFieldTocompare){
  classOne.setIdToInsert(classtwo.getIdToInsert());
}

如何比较这两个列表?

解决方法

我建议将 List<ClassTwo> 收集到 Map<String,Integer> 中,这是 Map(fieldToCompare,idToInsert) 以获得更好的性能

Map<String,Integer> classTwoMap = classTwoList.stream()
                    .collect(Collectors.toMap(two->two.getFieldToCompare(),two->two.getIdToInsert()));

然后现在只需在 forEach

上使用 classListOne
classListOne.forEach(one -> one.setidToInsert(classTwoMap.getOrDefault(one.getFieldTocompare(),one.getIdToInsert())));