提问人:julien GARNON 提问时间:1/14/2023 最后编辑:julien GARNON 更新时间:1/15/2023 访问量:24
JAVA如何比较两个对象列表,并在某个值匹配时设置一个与另一个
JAVA how to compare two list of object and set one with the other when some value match
问:
我有两个对象列表。
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!
答: 暂无答案
下一个:R 中两个以上列表的比较
评论