Java计算两个ArrayList或HashMap的队列

标签 java java-stream

我有 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/

相关文章:

java - 一个列表至少包含另一个列表中的一个值 (Java 8)

java.util.Date null 与 ProGuard

Java 8 : Map instead of simple loop

java - 如何在 Olingo OData V4 java API 中创建枚举实体类型

java - Swing App - 调整东面板组件的位置

java - 使用java流在 map 中按值分组

java - 是否可以使用 Java Guava 将连接器(收集器、累加器)应用于函数?

java - 解释性能差异

Java返回值取决于字符串中猫和狗的出现?

Java2D的drawString很慢?