【问题标题】:how can I compare some field at list and insert it's values, in another list?如何比较列表中的某些字段并将其值插入另一个列表中?
【发布时间】:2021-04-23 15:25:58
【问题描述】:

我有两个列表,第一个是 List<ClassOne>,第二个是 List<ClassTwo>。 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&lt;ClassOne&gt;List&lt;ClassTwo&gt;ClassTwo 包含idToInsert 字段,当fieldToCompare 字段在两个类中相同时,必须插入ClassOne

类似

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

如何比较这两个列表?

【问题讨论】:

    标签: java arraylist compare


    【解决方案1】:

    我建议将List&lt;ClassTwo&gt; 收集到Map&lt;String,Integer&gt; 中,即Map(fieldToCompare, idToInsert) 以获得更好的性能

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

    然后现在只需在classListOne 上使用forEach

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      • 2021-12-13
      • 1970-01-01
      • 2021-03-06
      相关资源
      最近更新 更多