import java.util.*;
import java.io.*;
import java.util.stream.*;

class Main
{
	public static void main(String[] args) throws IOException {
        final List<Filter> list = Arrays.asList(new Filter("status", "equal", "active"),
                new Filter("status", "equal", "inactive"), new Filter("name", "equal", "jhon"),
                new Filter("id", "equal", 123));
        final Map<String, List<Filter>> map = list.stream()
                .collect(Collectors.groupingBy(Filter::getKey, LinkedHashMap::new, Collectors.toList()));
        final List<Filter> result = map.entrySet().stream()
                .map(e -> e.getValue().size() > 1
                        ? new Filter(e.getKey(), "in", e.getValue().stream().map(Filter::getValue).toArray())
                        : e.getValue().get(0))
                .collect(Collectors.toList());
        result.forEach(System.out::println);
    }
}

class Filter {
    private String key;
    private String operator;
    private Object value;

    public Filter(String key, String operator, Object value) {
        super();
        this.key = key;
        this.operator = operator;
        this.value = value;
    }

    public String getKey() {
        return key;
    }

    public String getOperator() {
        return operator;
    }

    public Object getValue() {
        return value;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("Filter [key=").append(key).append(", operator=").append(operator).append(", value=")
                .append(value != null && value.getClass().isArray() ? Arrays.deepToString((Object[])value) : value)
                .append("]");
        return builder.toString();
    }
}