【发布时间】:2018-05-12 19:06:47
【问题描述】:
我正在用 Java 编写一个应用程序,我想在其中显示商店的完整时间表以及人何时进出以及何时无人。请查看附图。
人员列表在 JSON 文件中:
{
"venue": {
"id": 123456,
"name": "Foursquare HQ",
"openTime": 1479798000000,
"closeTime": 1479864600000,
"visitors": [
{
"id": 1,
"name": "Dave",
"arriveTime": 1479805200000,
"leaveTime": 1479816000000
},
{
"id": 2,
"name": "Elizabeth",
"arriveTime": 1479801600000,
"leaveTime": 1479819600000
},
{
"id": 3,
"name": "Ben",
"arriveTime": 1479826800000,
"leaveTime": 1479830400000
},...
这个 json 被提取出来,可以通过一个叫做 getVisitors 的方法访问,它返回一个 List。 Person 类声明如下:
public final class Person{
private int id;
private String name;
private long arriveTime;
private long leaveTime;
public Person(int id, String name, long arriveTime, long leaveTime){
this.id = id;
this.name = name;
this.arriveTime = arriveTime;
this.leaveTime = leaveTime;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public long getArriveTime() {
return arriveTime;
}
public long getLeaveTime() {
return leaveTime;
}
}
我正在寻找一种方法来首先按升序对 getVisitor 返回的列表进行排序,以便从第一个到最后一个。我在考虑使用到达时间并使用
Collections.sort(list, new Comparable()...)
问题是我需要重写 compareTo 方法,但它被拒绝了,因为 compareTo 返回整数并且我的到达时间很长。
我的另一个问题是如何添加“无访客”项目?第一个和最后一个可以使用
添加list.add(idx, element)
但我没有看到一个简单的算法可以在白天找到访客之间的空位。
我正在使用 RecycledView 将信息显示为列表,如下所示:
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private RecyclerView rvRecyclerView;
private static PersonAdapter personAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rvRecyclerView = findViewById(R.id.rvRecyclerView);
rvRecyclerView.setLayoutManager(new LinearLayoutManager(this));
if(personAdapter == null)
personAdapter = new PersonAdapter();
//set the adapter of the recycler view to push data.
rvRecyclerView.setAdapter(personAdapter);
Log.d(TAG, "ON CREATE CALL");
new VenueFetcher(this).execute();
}
VenueFetch 是一个 AsyncTask,负责从 json 文件中提取 json 并使用对
的调用 mainActivity.personAdapter.notifyDataSetChanged();
更新部分工作的列表
这不是重复的,因为我也在时间范围内寻找空槽。根据访客列表和商店的开/关时间,我需要找到没有访客的所有时段
有什么想法吗?
【问题讨论】:
-
您能否添加 compareTo() 方法的代码。您是如何覆盖该方法的?要进行排序,您需要在用户类中实现可比较并需要比较到达时间。然后您可以使用 Collections.sort(list); 简单地按到达时间对列表进行排序;
-
每个问题一个问题!