问题描述
我有两个列表,第一个是 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())));