fork download
  1. import java.util.*;
  2. import java.io.*;
  3. import java.util.stream.*;
  4.  
  5. class Main
  6. {
  7. public static void main(String[] args) throws IOException {
  8. final List<Filter> list = Arrays.asList(new Filter("status", "equal", "active"),
  9. new Filter("status", "equal", "inactive"), new Filter("name", "equal", "jhon"),
  10. new Filter("id", "equal", 123));
  11. final Map<String, List<Filter>> map = list.stream()
  12. .collect(Collectors.groupingBy(Filter::getKey, LinkedHashMap::new, Collectors.toList()));
  13. final List<Filter> result = map.entrySet().stream()
  14. .map(e -> e.getValue().size() > 1
  15. ? new Filter(e.getKey(), "in", e.getValue().stream().map(Filter::getValue).toArray())
  16. : e.getValue().get(0))
  17. .collect(Collectors.toList());
  18. result.forEach(System.out::println);
  19. }
  20. }
  21.  
  22. class Filter {
  23. private String key;
  24. private String operator;
  25. private Object value;
  26.  
  27. public Filter(String key, String operator, Object value) {
  28. super();
  29. this.key = key;
  30. this.operator = operator;
  31. this.value = value;
  32. }
  33.  
  34. public String getKey() {
  35. return key;
  36. }
  37.  
  38. public String getOperator() {
  39. return operator;
  40. }
  41.  
  42. public Object getValue() {
  43. return value;
  44. }
  45.  
  46. @Override
  47. public String toString() {
  48. StringBuilder builder = new StringBuilder();
  49. builder.append("Filter [key=").append(key).append(", operator=").append(operator).append(", value=")
  50. .append(value != null && value.getClass().isArray() ? Arrays.deepToString((Object[])value) : value)
  51. .append("]");
  52. return builder.toString();
  53. }
  54. }
Success #stdin #stdout 0.08s 34492KB
stdin
Standard input is empty
stdout
Filter [key=status, operator=in, value=[active, inactive]]
Filter [key=name, operator=equal, value=jhon]
Filter [key=id, operator=equal, value=123]