【问题标题】:How to calculate time difference between 2 objects in an ArrayList如何计算 ArrayList 中两个对象之间的时间差
【发布时间】:2017-04-02 11:51:27
【问题描述】:

如果标题与请求不一致,我很抱歉,但那是我当时能想到的最好的。

所以我有一个以对象为参数的 ArrayList。

private List<Movement> walked = new ArrayList<>();

注意:运动是类的名称 我有一个方法可以计算两个时间字符串之间的时间差,效果很好。

我的困境是当我单击一个按钮时,一个对象被添加到 ArrayList。我想知道这个新点击和下一次点击之间的持续时间作为记录这两个动作的时间。

我正在我的 onClickListener 中做这样的事情

Movement move = new move();
move.setTime("current time");
walked.add(move);

因此,根据点击次数,我希望能够获取列表中的对象,获取它们各自的时间并计算每个对象的时间差,并在我点击时输出。

我的时间计算函数工作我只是无法正确迭代。这是我尝试过的;

for(Movement x:walked){
  Toast(TimeCal.getDuration(x.getTime(),  "i'm to put the previous object time here") + " min(s)");
}

任何帮助将不胜感激。

【问题讨论】:

  • for(int i = 1; i &lt; walked.size(); i++){ Movement current = walked.get(i); Movement prev = walked.get(i-1); Toast(TimeCal.getDuration(current.getTime(), prev.getTime()) + " min(s)") }
  • 您想要做的是单击一个按钮,每次单击时都想显示自上次单击以来经过了多少时间?如果是这种情况,您是否需要历史记录或点击次数进行统计或类似的东西,或者您可以只使用最后一次点击然后丢弃它吗?
  • 正是@palako,我真的不需要点击统计信息。时差是最重要的。谢谢
  • @Shark,我得到 ArrayIndexOutOfBoundsException:
  • @shark 使用您的代码让它工作。谢谢,您能否将其发布为答案,以便我给予您适当的信任。谢谢。

标签: java android arraylist iterator


【解决方案1】:

为了在一个循环中比较当前点击与上一次点击,您不应使用foreach,而应使用for 循环。大致如下:

if(walked.size() > 0)
for(int i = 1; i < walked.size(); i++) { 
    Movement current = walked.get(i); 
    Movement prev = walked.get(i-1);
    Toast(TimeCal.getDuration(current.getTime(), prev.getTime()) + " min(s)") 
}

【讨论】:

    【解决方案2】:

    根据您对我在问题中的评论的回复,忘记 ArrayList,您所需要的只是对最新点击的引用。

    您正在 onClickListener 中创建一个移动动作。将其保存为对象属性而不是局部变量,当您获得下一次点击时,在 onClickListener 上添加一些代码以检查是否设置了该变量。如果是,只需将您存储在对象属性中的运动与您刚刚获得的运动之间的时间差。

    【讨论】:

    • 哦,span,抱歉@palako,我忘了说我必须稍后保存所有点击(时间),这就是我使用数组列表的原因
    • 保存它们以便以后使用,或者只是做我告诉你的同样的事情,但保持数组全局并访问最后一个元素进行比较。
    猜你喜欢
    • 2011-10-10
    • 2010-10-29
    • 2016-12-17
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多