Your example code has some problems: Set<String> selection = new H

Your example code has some problems:

    Set<String> selection = new HashSet<>();
    set.forEach(item -> {
        if (item.contains("o")) {
            selection.add(item);
        }
    });

    Bean bean =  new Bean();
    select.setValue(selection);

    binder.forField(select)
        .asRequired("Empty selection not allowed")
        .withValidator(sel -> sel.size() == 2 && sel.contains("Two") && sel.contains("Four"),"Selection needs to contain two and four")
        .bind(Bean::getSelection,Bean::setSelection);        
    binder.setBean(bean);

Your are setting the value directly, instead of setting the selection in the bean, so the value is set when “binder.setBean(bean)” is called. Have you actually run this test?