Duvida com um método usando For Each

Ola, estou estudando um programa e me deparei com esse método:

[code]@Override
protected void doPoll(long time) {

	try {

		// no data
		if (getInSerialStream().available() == 0) {

			for (DataPointRT dataPoint : dataPoints) {
				ASCIISerialPointLocatorVO dataPointVO = dataPoint.getVO().getPointLocator();
				if (!dataPointVO.getCommand().equals(null)) {
					getOutSerialStream().write(dataPointVO.getCommand().getBytes());
				}

			}[/code]

Esse codico funciona da seguinte forma, para cada Tag existe comando:

Tag 1 Command (envia o comando da Tag 1, recebe o valor e atualiza, fecha a porta).
Tag 2 Command (envia comando da Tag 2, recebe o valor e atualiza, fecha a porta),
.
.
.
E assim sucessivamente,

Porem no codico não consigo visualizar um índice que ordene o envio uma de cada vez, alguém entende o que foi feito?

A duvida maior seria nesta linha do codico:

ASCIISerialPointLocatorVO dataPointVO = dataPoint.getVO().getPointLocator();

Dois objetos e dois metodos ???

Olá!
Cara é o seguinte, o for each itera sobre uma coleção, no seu caso é uma coleção de DataPointRT, ou seja, ele percorre cada elemento da sua coleção de DataPointRT e atribui uma referência a cada iteração para o seu objeto dataPoint. Desta forma ASCIISerialPointLocatorVO dataPointVO = dataPoint.getVO().getPointLocator(); agora é possível acessar propriedades do seu objeto dataPoint da classe DataPointRT.

@j2tinho muito obrigado pela resposta, não conheço coleção vou procurar alguns exemplos para estudar, gostaria de saber se meu entendimento estaria correto abaixo:

Acredito que o DataPointRT deve ter um método que controle seu tamanho, vou explicar no codico abaixo.

Supondo que eu queira enviar o comando 5 da Tag 5

for (DataPointRT dataPoint : dataPoints) { //DataPointRT = 5 sendo o dataPoint o índice ASCIISerialPointLocatorVO dataPointVO = dataPoint.getVO().getPointLocator(); //Itera ate o valor 5 if (!dataPointVO.getCommand().equals(null)) { getOutSerialStream().write(dataPointVO.getCommand().getBytes()); //Envia pela porta serial o getCommand() 5

Aqui seria onde atribui o valor lido na porta serial

if (getInSerialStream().available() > 0) { for (DataPointRT dataPoint : dataPoints) { ASCIISerialPointLocatorVO dataPointVO = dataPoint.getVO().getPointLocator(); dataPoint.updatePointValue(new PointValueTime(value, timestamp)); // atualiza o value na posição 5

Estaria certo meu entendimento?

Ps :Coloquei apenas parte do codico já que duvida seria achar o indice.