首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中用零填充列表

在Java中用零填充列表
EN

Stack Overflow用户
提问于 2012-04-19 16:03:34
回答 4查看 1.1K关注 0票数 1

我是用Java工作的,我有一个TimestampAndValue类型的对象列表:

代码语言:javascript
复制
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

<代码>f 210

我想要输出这个列表:

  • 元素1:时间戳= 0,值=5
  • 元素2:时间戳= 1,值=0
  • 元素3:时间戳= 3,值=0
  • 元素4:时间戳= 4,值=6

<代码>H 120元素5:时间戳= 5,值=0<代码>H 221<代码>H 122元素6:时间戳= 6,值= 10 <代码>H 223H 124元素7:时间戳= 7,值=0<代码><代码>H 126元素8:时间戳= 11,值=0<代码H 227/代码>代码><<代码>代码>< 12 8码>代码<12码>代码代码<<2 29>代码代码<<230>代码<230><<230>代码<230><>

我会尽量解释一下我需要什么。当两个时间戳不是连续整数时,我需要在它们之间放置最小数量的零。例如,在上面列表中时间戳4和6之间的情况下,我只需要放置一个零,但是在两个时间戳相差两个或两个以上的情况下,我需要在第一个时间戳之后放置一个零,在第二个时间戳之前放置一个零。你可以在时间戳6到10之间看到这一点。我还需要放置的零有正确的时间戳集。

现在我不知道怎么解决这个问题。谢谢您一直鼓励我!

这是我用你的建议解决问题的方法:

代码语言:javascript
复制
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;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-19 16:15:04

您必须处理输入列表中的时间戳对,积累一个输出列表:

代码语言:javascript
复制
outputList = new list of timestamps;

for (int i = 0; i < numerOfTimestamps-1; i++) {
    timestamp1 = inputList.get(i);
    timestamp2 = inputList.get(i+1);

对于每一对,比较它们之间的距离:

  • (如果它们是连续的),如果差小于2,将timestamp1添加到输出列表(
  • )中,如果差异等于或大于2,则添加timestamp1和带有0的新时间戳到输出列表(
  • ),添加timestamp1和两个新时间戳( 0 )到输出列表H 212f 213

然后

代码语言:javascript
复制
} // close loop

并将最后一个时间戳添加到输出列表中。(它从来不被循环添加。)

请注意,您需要单独处理空输入列表。

票数 0
EN

Stack Overflow用户

发布于 2012-04-19 16:06:43

也许我没有正确地解决您的问题,但是如果时间戳不存在,您是否尝试在wich中实现一个默认值为0的机制?它将更有效率和更简单。

票数 0
EN

Stack Overflow用户

发布于 2012-04-19 16:14:10

这是作业吗?如果是,请按此标记。

也许我误解了这个问题,但我认为一个简单的循环应该有效。根据时间戳对列表进行排序,然后遍历所有的值。一旦找到一个不连续的时间戳,就插入一个0项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10232131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档