【问题标题】:How to compare the JSON object with the same key in the same JSON in Android Studio in Java?java - 如何在Java中的Android Studio中比较具有相同JSON中相同键的JSON对象?
【发布时间】:2021-06-07 06:14:45
【问题描述】:

我是新手。我正在 GitHub 中探索一个时间表 Android 库。我现在可以保存类数据的 JSON,并且我有一个存储简单时间表数据的 JSON。 JSON字符串如下:

String data:
{
        "sticker":[ {
                    "idx":2,
                    "schedule":[{
                                    "classTitle": "Image Processing",
                                    "classPlace": "DK3",
                                    "professorName":"John",
                                    "day":4,
                                    "startTime" :{"hour":8,"minute":0},
                                    "endTime"   :{"hour":10,"minute":0}
                                }]
                    },
                    {
                    "idx":4,
                    "schedule":[{
                                    "classTitle":"Digital Signal Processing",
                                    "classPlace":"DK10",
                                    "professorName":"Billy",
                                    "day":0,
                                    "startTime" :{"hour":8,"minute":0},
                                    "endTime"   :{"hour":10,"minute":0}
                                }]
                    },
                    {
                    "idx":6,
                    "schedule":[{
                                    "classTitle":"Data Analytics",
                                    "classPlace":"DK6",
                                    "professorName":"Susan",
                                    "day":2,
                                    "startTime" :{"hour":15,"minute":0},
                                    "endTime"   :{"hour":17,"minute":0}
                                }]
                    }
                ]
    }

我想检查 JSON 中是否有任何课程与彼此的课时重叠。例如,A班和B班在同一天,B班在A班的间隔开始。如何检查班级的条件以找出重叠的班级并显示两者的所有信息课程安排。

以下是可能相关的时间表库的Java类。

这是 Sticker.java

package com.github.tlaabs.timetableview;

import android.widget.TextView;

import java.io.Serializable;
import java.util.ArrayList;

public class Sticker implements Serializable {
    private ArrayList<TextView> view;
    private ArrayList<Schedule> schedules;

    public Sticker() {
        this.view = new ArrayList<TextView>();
        this.schedules = new ArrayList<Schedule>();
    }

    public void addTextView(TextView v){
        view.add(v);
    }

    public void addSchedule(Schedule schedule){
        schedules.add(schedule);
    }

    public ArrayList<TextView> getView() {
        return view;
    }

    public ArrayList<Schedule> getSchedules() {
        return schedules;
    }
}

这是 Schedule.java

package com.github.tlaabs.timetableview;

import java.io.Serializable;

public class Schedule implements Serializable {
    static final int MON = 0;
    static final int TUE = 1;
    static final int WED = 2;
    static final int THU = 3;
    static final int FRI = 4;
    static final int SAT = 5;
    static final int SUN = 6;

    String classTitle="";
    String classPlace="";
    String professorName="";
    private int day = 0;
    private Time startTime;
    private Time endTime;

    public Schedule() {
        this.startTime = new Time();
        this.endTime = new Time();
    }

    public String getProfessorName() {
        return professorName;
    }

    public void setProfessorName(String professorName) {
        this.professorName = professorName;
    }

    public String getClassTitle() {
        return classTitle;
    }

    public void setClassTitle(String classTitle) {
        this.classTitle = classTitle;
    }

    public String getClassPlace() {
        return classPlace;
    }

    public void setClassPlace(String classPlace) {
        this.classPlace = classPlace;
    }

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }

    public Time getStartTime() {
        return startTime;
    }

    public void setStartTime(Time startTime) {
        this.startTime = startTime;
    }

    public Time getEndTime() {
        return endTime;
    }

    public void setEndTime(Time endTime) {
        this.endTime = endTime;
    }
}

感谢任何帮助。

【问题讨论】:

  • 在 Schedule 中定义一个方法来确定是否有重叠。 hasOverlap(Schedule obj) 然后与其他人一起检查每个时间表。

标签: java android json


【解决方案1】:

我不知道任何图书馆可以做到这一点,但你可以自己做。

首先,您可以比较一周中的课程日期,以了解您必须比较哪些课程(您将比较同一天的课程)。

然后,当你有一天的课时,你必须比较这些课的小时数。

String startTime = "08:00";
String endTime= "10:00";

String timeToCompare="08:30";

String[] parts = startTime .split(":");
Calendar cal1 = Calendar.getInstance();
cal1.set(Calendar.HOUR_OF_DAY, Integer.parseInt(parts[0]));
cal1.set(Calendar.MINUTE, Integer.parseInt(parts[1]));

parts = endTime.split(":");
Calendar cal2 = Calendar.getInstance();
cal2.set(Calendar.HOUR_OF_DAY, Integer.parseInt(parts[0]));
cal2.set(Calendar.MINUTE, Integer.parseInt(parts[1]));

parts = timeToCompare.split(":");
Calendar cal3 = Calendar.getInstance();
cal3.set(Calendar.HOUR_OF_DAY, Integer.parseInt(parts[0]));
cal3.set(Calendar.MINUTE, Integer.parseInt(parts[1]));

使用此代码,您可以创建开始和结束时间以及要比较的时间的日历对象。

然后,您将 timeToCompare 与两个时间进行比较,以了解 timeToCompare 是否介于 startTime 和 endTime 之间:

if (cal1.before(cal3) && cal2.after(cal3)) {
    System.out.println("timeToCompare between startTime and endTime");
}

所以,如果你有 A 类和 B 类,你可以将 B 类的 startTime 与 A 类的 startTime 和 endTime 以及 B 类的 endTime 与 A 类的 startTime 和 endTime 进行比较。如果 B 类的任何时间在 startTime 之间和A类的endTime,类重叠。

我希望我已经理解了您的问题并且这个解决方案可以为您服务。

【讨论】:

  • 感谢您的回复!现在我有 {"hour":8,"minute":0} 形式的 startTime,如何将其转换为 "08:00"?
  • 我猜你已经序列化了 json,所以最简单的选择是在你的 Time.java 类中创建一个函数(例如,调用 timeString),它返回类似的内容: public String timeString() { return String.valueOf(hour)+":"+String.valueOf(minute) } 使用此函数,您可以将变量小时和分钟转换为字符串并与“:”连接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-17
  • 1970-01-01
  • 2013-12-20
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多