在Java的日程表中查找对象列表中的空插槽

时间:2017-11-29 09:15:11

标签: java android json list

我正在用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;
    }
}

我的问题是如何添加“没有访客”项目?可以使用

添加第一个和最后一个
list.add(idx, element)

但我没有看到一个简单的算法来查找访客之间白天的空白点。

在店内没有访客出现时,必须出现“无访客”。基本上是2个访客之间的差距,并且基于商店的整体openTime和closeTime

我使用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();

更新部分工作的列表

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您不需要添加"没有访问者"项目到您的列表。只需根据其到达时间对Person列表进行排序,然后遍历列表并检查当前Person的leaveTime是否小于列表中下一个Person的arrivalTime。