将元素从数组复制到数组列表,但如果先前已输入某些元素,则跳过元素

时间:2017-11-16 17:11:44

标签: java arrays arraylist

我正在尝试遍历下面的数组,然后使用下面的格式将元素添加到数组列表中。

这是数组:

    String[] arr = {
            "room1", "10.11.2017", "17:00-18:00", "meeting event",
            "room2", "12.11.2017", "19:00-20:00", "meeting event",
            "room3", "20.11.2017", "20:00:21:00", "meeting event",
            "room1", "10.11.2017", "18:00-19:00", "meeting event",
            "room1", "15.11.2017", "10:00-11:00", "meeting event",
            "room2", "12.11.2017", "21:00-22:00", "meeting event",
            "room2", "12.11.2017", "22:00-23:00", "meeting event",
            "room3", "20.11.2017", "21:00:22:00", "meeting event",
            "room1", "10.11.2017", "19:00-20:00", "meeting event",
            "room4", "30.11.2017", "09:00-10:00", "meeting event"
    };

我想获得一个包含以下字符串元素的新数组列表:

room1 , 10.11.2017 , 17:00-18:00 , 18:00-19:00 , 19:00-20:00 , meeting event
room2 , 12.11.2017 , 19:00-20:00 , 21:00-22:00 , 22:00-23:00 , meeting event
room3 , 20.11.2017 , 20:00:21:00 , 21:00:22:00 , meeting event
room1 , 15.11.2017 , 10:00-11:00 , meeting event
room4 , 30.11.2017 , 09:00-10:00 , meeting event

但我得到了:

room1 , 10.11.2017 , 17:00-18:00 , 18:00-19:00 , 19:00-20:00 , meeting event
room2 , 12.11.2017 , 19:00-20:00 , 21:00-22:00 , 22:00-23:00 , meeting event
room3 , 20.11.2017 , 20:00:21:00 , 21:00:22:00 , meeting event
room1 , 10.11.2017 , 18:00-19:00 , 19:00-20:00 , meeting event
room1 , 15.11.2017 , 10:00-11:00 , meeting event
room2 , 12.11.2017 , 21:00-22:00 , 22:00-23:00 , meeting event
room2 , 12.11.2017 , 22:00-23:00 , meeting event
room3 , 20.11.2017 , 21:00:22:00 , meeting event
room1 , 10.11.2017 , 19:00-20:00 , meeting event
room4 , 30.11.2017 , 09:00-10:00 , meeting event

有没有办法改变下面的代码,以便得到我需要的结果?

ArrayList<String> arr2 = new ArrayList<String>();

    String roomNumber= new String();
    String bookedDate = new String();
    String bookedTime = new String();
    String event = new String();

    for (int i = 0; i < arr.length; i+=4) {
        roomNumber = arr[i];
        bookedDate = arr[i+1];
        bookedTime = arr[i+2];
        event = arr[i+3];

        for (int j = i + 4; j < arr.length; j+=4) {
                if (arr[i].equals(arr[j]) && arr[i+1].equals(arr[j+1]) && !arr[i+2].equals(arr[j+2])){
                    bookedTime = bookedTime + " , " + arr[j+2];
                } 
            }

        arr2.add(roomNumber +  " , " + bookedDate + " , " + bookedTime +  " , " + event);
        }

    for (int k =  0; k <arr2.size(); k++) {
        System.out.println(arr2.get(k));
    }

谢谢。

2 个答案:

答案 0 :(得分:0)

从长远来看,面向对象的方法可以为您提供更好的服务。在我尝试模拟可能的解决方案之前,我想指出以下内容:

  1. 您的原始数组,包含字符串的arr实际上只是一个大数组。它看起来像线条,但它实际上没有结构。这就是为什么要使用数组从文件中获取数据的原因。
  2. 在我看来,代表整个系统的模型类会更好。举个例子,你可以有这样一个类:

    public class HotelRoom {
       private String roomId;
       private String roomType;
    }
    
    public class Booking {
       private HotelRoom room;
       private String purpose;
       private Date bookingDate;
    }
    

    这些模型并不完整,但它们描绘了我的意思。因此,预订信息可能是您的文件中包含的内容,因此您可以在从文件中读取时创建模型,创建这些对象,然后将其放入数组列表中。这种结构有帮助。您可以在需要清晰的地方提出问题。享受

答案 1 :(得分:0)

https://stackoverflow.com/users/2369963/adamson-jeremiah所述,解决此问题的最佳方法是使用类和对象。但是,如果您要修改现有代码,问题是您正在尝试比较已经检查过的记录。我们可以使用布尔数组来比较已经比较的记录。在这种情况下的记录是4个数组元素的组合。

SELECT * FROM @dummyTable;