Collection itemIds = archivesTable.getItemIds(); final HashMap<Object,Select> firstColumnSelects = new HashMap<Object, Select>(); final HashMap<Object,Select> secondColumnSelects = new HashMap<Object, Select>(); for(Object itemId : itemIds) { final Select secondColumnSelect = new Select(); //initialize select for the second column secondColumnSelect.setImmediate(true); Select firstColumnSelect = new Select(); //initialize select for the first column firstColumnSelect.addListener(new ValueChangeListener() { @Override public void valueChange(ValueChangeEvent event) { //setting value to the list in second column secondColumnSelect.setValue(event.getProperty().getValue()); } }); firstColumnSelect.setImmediate(true); firstColumnSelects.put(itemId, firstColumnSelect); secondColumnSelects.put(itemId, secondColumnSelect); }