code: public static List<Expression> addOrReplaceColumns(List<String> inputFields, List<Expression> newExpressions) {
  		LinkedHashMap<String, Expression> finalFields = new LinkedHashMap<>();
  
  		inputFields.forEach(field -> finalFields.put(field, new UnresolvedReferenceExpression(field)));
  		newExpressions.forEach(expr -> {
  			String name = extractName(expr).orElse(expr.toString());
  			finalFields.put(name, expr);
  		});
  
  		return new ArrayList<>(finalFields.values());
  	}
docs: Creates a projection list that adds new or replaces existing (if a column with corresponding name already exists)
  columns.
  
  <p><b>NOTE:</b> Resulting expression are still unresolved.
  
  @param inputFields names of current columns
  @param newExpressions new columns to add
  @return projection expressions