public Table projection(List<String> _parameters) {
        Table newTable = new Table();
        // Параметры всегда должны совпадать с запрашиваемыми по содержанию и порядку,
        // поэтому их просто копируем
        newTable.parameters.addAll(_parameters);        
        // Определяем номера столбцов, которые надо внести в новую таблицу
        List<Integer> parametersNumbers = new ArrayList<>();
        for (int i = 0; i < _parameters.size(); i++) {
            for (int j = 0; j < parameters.size(); j++) {
                if (_parameters.get(i).equals(parameters.get(j))) {
                    parametersNumbers.add(j);
                    break;
                }
            }
        }
        // формируем строки таблицы
        for (int i = 0; i < attributes.size(); i++) {
            List<String> _attributes = new ArrayList<>();            
            for (int j = 0; j < parametersNumbers.size(); j++) {
                // если строка стоит в разрешённом столбце, то добавляем её в новую таблицу
                _attributes.add(attributes.get(i).get(parametersNumbers.get(j)));
            }
            newTable.attributes.add(_attributes);
        }
        return newTable;
    }