private List<ProductCombination> getValidDeals( List<ProductCombination> allCombinations) {
		
		List<ProductCombination> validDeals = new ArrayList<ProductCombination>();

		Product prod = null;
		ProductCombination tempCombo = null;
		Item item = null;
		Item desiredItem = null;
		
		// An array of boolean flags to show if a desired food item has been found.
		boolean [] itemFound = new boolean[desiredItems.size()];
		boolean containsDesiredFoods = true;
		
		// For each product combination
		for (int h=0; h < allCombinations.size(); h++) {
		
			containsDesiredFoods = true;
			tempCombo = allCombinations.get(h);

			// Reset array elements before each pass
			Arrays.fill(itemFound, false);
			
			// For each product in the combination.
			for (int i=0; i < tempCombo.getProducts().size(); i++) {

				// A single product
				prod = tempCombo.getProducts().get(i);
				
				// For each of the desired items
				for (int j=0; j < desiredItems.size(); j++) {
					
					// Check to see that the product contains all desired foods.
					for (int k=0; k < prod.getItems().size(); k++) {
						
						// Compare the item to the desired food.
						item = prod.getItems().get(k);
						desiredItem = desiredItems.get(j);
						
						if ( item.getFoodType() == desiredItem.getFoodType()) {
							itemFound[j] = true;
							break;
						}
					}
				}
			}
			
			// If at least one desired food is not present, flag the product combination as invalid.
			for (int l=0; l < itemFound.length; l++) {
				
				if (!itemFound[l]) {
					containsDesiredFoods = false;
					break;
				}
			}
			
			// If the product combination contains all desired foods, add it to the list of valid deals.
			if (containsDesiredFoods) {
				validDeals.add( tempCombo);
			}
		}
			
		return validDeals;
	}