Code review comment: @cheese8 Can we remove this util class? Replace it with `sampleTableRule.getActualDatasourceNames().equals( tableRule.getActualDatasourceNames()))`

Code under review:
private void checkSameActualDatasourceNamesAndActualTableIndex(final TableRule sampleTableRule, final TableRule tableRule, final String bindingTableGroup) {
        if (!CollectionUtils.isEqualCollection(sampleTableRule.getActualDatasourceNames(), tableRule.getActualDatasourceNames())) {
            throw new ShardingSphereConfigurationException("The %s on bindingTableGroup `%s` are inconsistent", "actualDatasourceNames", bindingTableGroup);
        }
        checkSameAlgorithmOnDatabase(sampleTableRule, tableRule, sampleTableRule.getActualDatasourceNames().stream().findFirst().get(), bindingTableGroup);
        for (String each : sampleTableRule.getActualDatasourceNames()) {
            Collection<String> sampleActualTableNames = sampleTableRule.getActualTableNames(each).stream().map(optional -> substring(optional)[1])
                    .filter(optional -> !optional.isEmpty()).collect(Collectors.toList());
            Collection<String> actualTableNames = tableRule.getActualTableNames(each).stream().map(optional -> substring(optional)[1])
                    .filter(optional -> !optional.isEmpty()).collect(Collectors.toList());
            if (!CollectionUtils.isEqualCollection(sampleActualTableNames, actualTableNames)) {
                throw new ShardingSphereConfigurationException("The %s on bindingTableGroup `%s` are inconsistent", "actualTableNames", bindingTableGroup);
            }
            checkSameAlgorithmOnTable(sampleTableRule, sampleTableRule.getActualTableNames(each).stream().findFirst().get(), tableRule,
                    tableRule.getActualTableNames(each).stream().findFirst().get(), bindingTableGroup);
        }
    }

Line commented on: if (!CollectionUtils.isEqualCollection(sampleTableRule.getActualDatasourceNames(), tableRule.getActualDatasourceNames())) {

Revised code:
private void checkSameActualDatasourceNamesAndActualTableIndex(final TableRule sampleTableRule, final TableRule tableRule, final String bindingTableGroup) {
        if (!sampleTableRule.getActualDatasourceNames().equals(tableRule.getActualDatasourceNames())) {
            throw new ShardingSphereConfigurationException("The %s on bindingTableGroup `%s` are inconsistent", "actualDatasourceNames", bindingTableGroup);
        }
        checkSameAlgorithmOnDatabase(sampleTableRule, tableRule, sampleTableRule.getActualDatasourceNames().stream().findFirst().get(), bindingTableGroup);
        for (String each : sampleTableRule.getActualDatasourceNames()) {
            Collection<String> sampleActualTableNames = sampleTableRule.getActualTableNames(each).stream().map(optional -> substring(optional)[1])
                    .filter(optional -> !optional.isEmpty()).collect(Collectors.toList());
            Collection<String> actualTableNames = tableRule.getActualTableNames(each).stream().map(optional -> substring(optional)[1])
                    .filter(optional -> !optional.isEmpty()).collect(Collectors.toList());
            if (!CollectionUtils.isEqualCollection(sampleActualTableNames, actualTableNames)) {
                throw new ShardingSphereConfigurationException("The %s on bindingTableGroup `%s` are inconsistent", "actualTableNames", bindingTableGroup);
            }
            checkSameAlgorithmOnTable(sampleTableRule, sampleTableRule.getActualTableNames(each).stream().findFirst().get(), tableRule,
                    tableRule.getActualTableNames(each).stream().findFirst().get(), bindingTableGroup);
        }
    }