public static String[] filteredFieldNamesOf(
            final AbstractDescribedSObjectBase object, final Predicate<SObjectField> filter) {
        if (object == null) {
            return NONE;
        }

        if (filter == null) {
            return fieldNamesOf(object);
        }

        final SObjectDescription description = object.description();
        final List<SObjectField> fields = description.getFields();

        return fields.stream().filter(filter).map(SObjectField::getName).toArray(String[]::new);
    }
@Test
    public void shouldFilterAndGatherAllFieldNames() {
        assertThat(QueryHelper.filteredFieldNamesOf(new Account(), SObjectField::isCustom)).contains("External_Id__c",
                "Shipping_Location__c");
    }