【发布时间】:2017-12-13 06:21:39
【问题描述】:
我有两个对象列表,它们都有一个称为时间戳的公共属性,并且都按时间戳排序。
我想根据时间戳逐个广播这些对象,例如,如果第一个列表的第一个对象的时间戳
我是java新手。这是我想出的:
//Merge the 2 object lists based on timestamp
ListIterator<x> xIterator = list1.listIterator();
ListIterator<y> yIterator = list2.listIterator();
while (xIterator.hasNext() && yIterator.hasNext()) {
if (xIterator.next().timestamp <= yIterator.next().timestamp) {
Bundle extra = new Bundle();
extra.putParcelable(LocalBroadcastConstants.ACTION, xIterator.previous());
MyBroadcastManager.getInstance(getTargetContext()).sendBroadcast(
new Intent(LocalBroadcastConstants.ACTION_SEND).putExtras(extra)
);
yIterator.previous();
} else {
Bundle extra = new Bundle();
extra.putParcelable(LocalBroadcastConstants.ACTION,
yIterator.previous());
MyBroadcastManager.getInstance(getTargetContext()).sendBroadcast(
new Intent(LocalBroadcastConstants.ACTION_SEND).putExtras(extra)
);
xIterator.previous();
}
我知道我的逻辑是不正确的,因为对于迭代器中的第一项,xIterator.previous 和 yIterator.previous 将指向任何内容。我似乎无法为这个问题陈述找到正确的解决方案。请帮忙。
【问题讨论】:
-
我对 Java 不熟悉。但是,如果这在 python 中,我将使用索引来跟踪和迭代索引,只有当该项目被广播时。上面的代码似乎效率低下,因为您要上下遍历很多次。如果你愿意,我可以发布一个伪代码
-
Unrelated :编写一个辅助方法来进行广播。复制该代码没有意义。相反 - 它使您的代码更难阅读并且更容易插入错误。每当您开始重复代码时 - 将该代码移动到它自己的方法中。
-
尽管不相关的@GhostCat 提出了一个非常有效的观点。您应该为任何可重用的代码创建一个帮助类成为一种习惯。