@Override
    public FindCoordinatorRequest.Builder buildRequest(Set<CoordinatorKey> keys) {
        unrepresentableKeys = keys.stream().filter(k -> k == null || !isRepresentableKey(k.idValue)).collect(Collectors.toSet());
        Set<CoordinatorKey> representableKeys = keys.stream().filter(k -> k != null && isRepresentableKey(k.idValue)).collect(Collectors.toSet());
        if (batch) {
            ensureSameType(representableKeys);
            FindCoordinatorRequestData data = new FindCoordinatorRequestData()
                    .setKeyType(type.id())
                    .setCoordinatorKeys(representableKeys.stream().map(k -> k.idValue).collect(Collectors.toList()));
            return new FindCoordinatorRequest.Builder(data);
        } else {
            CoordinatorKey key = requireSingletonAndType(representableKeys);
            return new FindCoordinatorRequest.Builder(
                new FindCoordinatorRequestData()
                    .setKey(key.idValue)
                    .setKeyType(key.type.id())
            );
        }
    }
@Test
    public void testBuildLookupRequestNonRepresentable() {
        CoordinatorStrategy strategy = new CoordinatorStrategy(CoordinatorType.GROUP, new LogContext());
        FindCoordinatorRequest.Builder request = strategy.buildRequest(new HashSet<>(Arrays.asList(
                CoordinatorKey.byGroupId("foo"),
                null)));
        assertEquals("", request.data().key());
        assertEquals(1, request.data().coordinatorKeys().size());
    }