我有 2 个类别:1 表示到达某个地点的车辆数量 一定的时间,第二个是实际计划的数量 允许车辆通行。输入数据如下所示:
车辆到达
(在此列表上循环,因为计划可能会遗漏一些值)
01/01/2018 00:00:00 12
01/01/2018 00:10:00 10
01/01/2018 01:00:00 5
01/01/2018 01:10:00 10
规划
(基于时间戳的最后规划是要采取的规划)
01/01/2018 00:00:00 2
01/01/2018 00:10:00 4
01/01/2018 01:00:00 6
<小时/>
我想要实现的是另一个类或 HashMap ,其中包含关键日期(或日期时间)、时间以及队列中的车辆数量。
在我们的示例中:
01/01/2018 00:00:00 | 12-2=10
01/01/2018 00:10:00 | 10-4+10(previous) =16
01/01/2018 01:00:00 | 5-6+16
01/01/2018 01:10:00 | 10-6(last value if planning not found)+15
我的类实现
class Vehicle {
private Date date;
private int nbOfVehicleArriving;
public Vehicle(Date date, int nbOfVehicleArriving) {
this.date = date;
this.nbOfVehicleArriving = nbOfVehicleArriving;
}
public int getNbOfVehicleArriving() {
return nbOfVehicleArriving;
}
}
class Planning {
private Date date;
private int nbOfallowedVehicles;
public Planning(Date date, int nbOfallowedVehicles) {
this.date = date;
this.nbOfallowedVehicles = nbOfallowedVehicles;
}
public int getNbOfallowedVehicles() {
return nbOfallowedVehicles;
}
}
class Queue {
private Date date;
private int nbOfVehiclesInQueue;
提前非常感谢。
我蹩脚的尝试:
if (planningList != null && vehiclesList != null) {
queues1 = new ArrayList<>();
int j = 0;
long count = 0;
for (int i = 0; i < planningList.size() - 1; i++) {
Date nextTime = planningList.get(i + 1).getTimestamp();
Integer nbOfVehiclesAllowed = planningList.get(i).getNbOfallowedVehicles();
while (j < vehiclesList.size() && vehiclesList.get(j).getTime() < nextTime.getTime()) {
count = Math.max(vehiclesList.get(j).nbOfVehicleArriving() - nbOfVehiclesAllowed + count, 0);
queues1.add(new Queue(vehiclesList.get(j).getDate(), count));
j++;
}
}
最佳答案
类 Queue 有 data 和 noOfVehiclesInQueue 作为成员变量。
class Vehicle {
private Date date;
private int nbOfVehicleArriving;
public Vehicle(Date date, int nbOfVehicleArriving) {
this.date = date;
this.nbOfVehicleArriving = nbOfVehicleArriving;
}
public int getNbOfVehicleArriving() {
return nbOfVehicleArriving;
}
public Date getDate() {
return date;
}
}
class Planning {
private Date date;
private int nbOfallowedVehicles;
public Planning(Date date, int nbOfallowedVehicles) {
this.date = date;
this.nbOfallowedVehicles = nbOfallowedVehicles;
}
public int getNbOfallowedVehicles() {
return nbOfallowedVehicles;
}
}
class Queue {
private Date date;
private int noOfVehiclesInQueue;
public Queue(Date date, int noOfVehiclesInQueue) {
this.date = date;
this.noOfVehiclesInQueue = noOfVehiclesInQueue;
}
public int getNoOfVehiclesInQueue() {
return noOfVehiclesInQueue;
}
@Override
public String toString() {
return "Queue [date=" + date + ", noOfVehiclesInQueue=" + noOfVehiclesInQueue + "]";
}
}
public class Demo {
public static void main(String[] args) {
List<Vehicle> veh=new ArrayList<>();
List<Planning> plan=new ArrayList<>();
List<Queue> queue=new ArrayList<>();
veh.add(new Vehicle(new Date("01/01/2018 00:00:00"), 12));
veh.add(new Vehicle(new Date("01/01/2018 00:10:00"), 10));
veh.add(new Vehicle(new Date("01/01/2018 01:00:00"), 5));
veh.add(new Vehicle(new Date("01/01/2018 01:10:00"), 10));
plan.add(new Planning(new Date("01/01/2018 00:00:00"), 2));
plan.add(new Planning(new Date("01/01/2018 00:10:00"), 4));
plan.add(new Planning(new Date("01/01/2018 01:00:00"), 6));
for(int i=0;i<veh.size();i++) {
int vehicleinpreviousqueue=(i!=0)?queue.get(i-1).getNoOfVehiclesInQueue():0;
int vehiclearrving=veh.get(i).getNbOfVehicleArriving();
int vehicleallowed=(i<veh.size()-1)?plan.get(i).getNbOfallowedVehicles():plan.get(i-1).getNbOfallowedVehicles();
int vehicleinqueue=((vehicleinpreviousqueue+vehiclearrving-vehicleallowed)>0)?(vehicleinpreviousqueue+vehiclearrving-vehicleallowed):0;
queue.add(new Queue(veh.get(i).getDate(), vehicleinqueue));
}
for(Queue q:queue) System.out.println(q.toString());
}
}
输出:
Queue [date=Mon Jan 01 00:00:00 IST 2018, noOfVehiclesInQueue=10]
Queue [date=Mon Jan 01 00:10:00 IST 2018, noOfVehiclesInQueue=16]
Queue [date=Mon Jan 01 01:00:00 IST 2018, noOfVehiclesInQueue=15]
Queue [date=Mon Jan 01 01:10:00 IST 2018, noOfVehiclesInQueue=19]
关于Java计算两个ArrayList或HashMap的队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50903983/