Как получить доступ и прочитать значения дочерних объектов объекта? - PullRequest
0 голосов
/ 26 февраля 2020

Вот как я строю объект внутри метода:

// сразу после создания класса

public static ArrayList<Object> old_devicelist = new ArrayList<Object>();

// внутри метода

Date date = new Date();
long time = date.getTime();
Integer opened = 0;
String deviceId = "";
String dev_rssi = "";
Object[] MyObject = new Object[]{time, opened, deviceId, dev_rssi};

old_devicelist.add(MyObject);

Теперь я хотел бы пройти l oop через этот ArrayList и получить доступ к некоторым элементам (обратите внимание, что в какой-то момент deviceId может содержать объект, и я хотел бы получить доступ к его полю id) внутри него, тогда я хотел бы использовать их как это, например. :

if(device.id == 33){

//do something...

}

Ответы [ 3 ]

0 голосов
/ 26 февраля 2020

Вы используете массив с типом Object, а затем сохраняете эти объектные массивы в список. Это затрудняет получение информации позже.

Обратите внимание на это:

public static List<Device> DEVICES = new ArrayList<>();

class Device {
  Date date;
  long time;
  Integer opened;
  String deviceId;
  String deviceRssi

  Device(Date date, Integer opened, String deviceId, String deviceRssi) {
    this.date = date;
    this.time = date.getTime();
    this.opened = opened;
    this.deviceId = deviceId;
    this.deviceRssi = deviceRssi;
  }
}

Device first = new Device(
  new Date(),
  0,
  "",
  "");

DEVICES.add(first);
System.out.println(DEVICES.get(0).deviceId);
...
for (Device device : DEVICES) {
  if (device.deviceId.equals("33)) {
    // ...
  }
}

Я бы порекомендовал не использовать слишком много статических / глобальных переменных и не читать о Java Соглашении о присвоении имен .

0 голосов
/ 26 февраля 2020

Прежде всего ваш Arraylist получает Objects, и вы пытаетесь добавить массив Object, поэтому, если ваша цель - сохранить массивы объектов с device_id, вы должны изменить Arraylist на

public static ArrayList<Object[]> old_devicelist = new ArrayList();

Принимая это во внимание Вы можете получить доступ к любому идентификатору устройства, набрав

old_devicelist.get(i)[2]

, где i - элемент, который вы хотите, и 2, потому что вы установили device_id в качестве третьего элемента вашего массива объектов! Надеюсь, это поможет!

0 голосов
/ 26 февраля 2020

Полагаю, вам следует создать новый класс вместо использования Object.

public class DeviceSpecification {  //or any other name
    long time;
    Integer opened;
    String deviceId;
    String dev_rssi;

    public DeviceSpecification(long time, Integer opened, String deviceId, String dev_rssi) {
        this.time = time;
        this.opened = opened;
        this.deviceId = deviceId;
        this.dev_rssi = dev_rssi;
    }
}

Создать список с указанием типа c:

public static List<DeviceSpecification> oldDeviceCollection = new ArrayList<>();

Создать экземпляр класса

DeviceSpecification device = new DeviceSpecification(new Date().getTime(), 0, "", "")

Добавить экземпляр в список

oldDeviceCollection.add(device);

Использовать его в запросе - мы можем использовать потоки из Java 8

oldDeviceCollection.stream()
   .forEach( 
     device -> {
       if(device.id.equals("33")) {
         // do something
      }
   );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...