私はJavaで作業しており、TimestampAndValue型のオブジェクトのリストがあります。
public class TimestampAndValue{
private double value;
private long timestamp;
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public double getValue() {
return value;
}
public void setValue(double value) {
this.value = value;
}
}
私のリストはこれに似ています:
- 要素1:タイムスタンプ= 0、値= 5
- 要素2:タイムスタンプ= 4、値= 6
- 要素3:タイムスタンプ= 6、値= 10
- 要素4:タイムスタンプ= 12、値= 1
そして、私はこのリストを出力に入れたいです:
- 要素1:タイムスタンプ= 0、値= 5
- 要素2:タイムスタンプ= 1、値= 0
- 要素3:タイムスタンプ= 3、値= 0
- 要素4:タイムスタンプ= 4、値= 6
- 要素5:タイムスタンプ= 5、値= 0
- 要素6:タイムスタンプ= 6、値= 10
- 要素7:タイムスタンプ= 7、値= 0
- 要素8:タイムスタンプ= 11、値= 0
- 要素9:タイムスタンプ= 12、値= 1
必要なものを簡単に説明しようと思います。2つのタイムスタンプが連続した整数でない場合、それらの間に最小数のゼロを配置する必要があります。たとえば、上記のリストのタイムスタンプ4と6の間の場合は、ゼロを1つだけ配置する必要がありますが、2つのタイムスタンプが2つ以上異なる場合は、最初のタイムスタンプの直後にゼロを配置し、ゼロを配置する必要があります。 2番目のタイムスタンプの直前。これは、タイムスタンプ6と10の間の場合に見られます。また、配置されたゼロに正しいタイムスタンプが設定されている必要があります。
今のところ、それを解決する方法がわかりません。ご支援いただきありがとうございます!
これはあなたの提案を使用して私のために働いた解決策です:
public static List<TimestampAndValue> insertMinimumNumberOfZerosBetweenValues(List<TimestampAndValue> list){
if(list == null || list.isEmpty() || list.size() == 1)
return list;
int i;
int j;
long tempTimestamp1;
long tempTimestamp2;
long timestampDifference;
List<TimestampAndValue> outList = new ArrayList<TimestampAndValue>();
outList.add(list.get(0));
for(i=0; i<list.size()-1; i++){
j=i+1;
tempTimestamp1 = list.get(i).getTimestamp();
tempTimestamp2 = list.get(j).getTimestamp();
timestampDifference = tempTimestamp2 - tempTimestamp1;
if(timestampDifference == 2){
TimestampAndValue tav = new TimestampAndValue();
tav.setTimestamp(tempTimestamp1 + 1);
tav.setValue(0);
outList.add(tav);
}
else if(timestampDifference > 2){
TimestampAndValue tav = new TimestampAndValue();
tav.setTimestamp(tempTimestamp1 + 1);
tav.setValue(0);
outList.add(tav);
TimestampAndValue tav2 = new TimestampAndValue();
tav2.setTimestamp(tempTimestamp2 - 1);
tav2.setValue(0);
outList.add(tav2);
}
outList.add(list.get(j));
}
return outList;
}