JAVA如何比较两个对象列表,并在某个值匹配时设置一个与另一个

JAVA how to compare two list of object and set one with the other when some value match

提问人:julien GARNON 提问时间:1/14/2023 最后编辑:julien GARNON 更新时间:1/15/2023 访问量:24

问:

我有两个对象列表。

List<TotalPowerValue> totalPowerValueList
public class TotalPowerValue {

    @JsonProperty("start_date")
    private String startDate;
    @JsonProperty("end_date")
    private String endDate;
    @JsonProperty("product")
    private String product;
    @JsonProperty("flow_direction")
    private String flowDirection;
    @JsonProperty("volume_quantity")
    private Double volumeQuantity;

}

另一个有

 List<ProcuredReserveValue> ProcuredReserveValueList
public class ProcuredReserveValue {
    @JsonProperty("startDate")
    private String startDate;
    @JsonProperty("type")
    private String type;
    @JsonProperty("direction")
    private String direction;
    @JsonProperty("volumeQuantity")
    private Integer volumeQuantity;
    @JsonProperty("quantity")
    private Integer value;
    @JsonProperty("price")
    private Double price;
    @JsonProperty("temporality")
    private String temporality;

该列表在每个属性上都有 setter 和 getter。

如果每个条件都匹配,我想对里面的每个对象进行比较: -if “type” == “product” 和

  • if 方向 == flow_direction 和 -如果 startDate 在另一个 startDate 和 EndDate 内

如果每个条件都匹配,我想为每个匹配条件设置 ProcuredReserveValue 上的 volumeQuantity 和 TotalPowerValue 上的匹配volume_quantity。

为此,我尝试了此代码

    protected List<ProcuredReserveValue> assembleTotalBalancingCapacityToProcuredReservesData( List<ProcuredReserveValue> procuredReserveData, List<TotalPowerValue> totalBalancingCapacityList) {

        return procuredReserveData.stream()
                .filter(p -> totalBalancingCapacityList.stream().anyMatch(e -> p.getType() == e.getProduct()))
                .filter(p -> totalBalancingCapacityList.stream().anyMatch(e -> p.getDirection() == e.getFlowDirection()))
                .filter(p -> totalBalancingCapacityList.stream().anyMatch(e -> isWithinRange(p.getStartDate(), e.getStartDate(), e.getEndDate())))
                .collect(Collectors.toList());

    }

    protected boolean isWithinRange(String testDate, String startDate, String endDate) {
        Instant testDateInstant = Instant.parse(testDate);
        Instant startDateInstant = Instant.parse(startDate);
        Instant endDateInstant = Instant.parse(endDate);
        
return !(testDateInstant.isBefore(startDateInstant) || testDateInstant.isBefore(endDateInstant));
    }

过滤器还可以,但我不知道如何用另一个设置 VolumeQuantity!

列表 筛选器 比较

评论


答: 暂无答案