fork(1) download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.util.stream.*;
  5. import java.lang.*;
  6. import java.io.*;
  7.  
  8. /* Name of the class has to be "Main" only if the class is public. */
  9. class Ideone
  10. {
  11. static class MyObject {
  12. private String key;
  13. private String value1;
  14. private String value2;
  15.  
  16. MyObject(String key, String value1, String value2) {
  17. this.key = key;
  18. this.value1 = value1;
  19. this.value2 = value2;
  20. }
  21. }
  22.  
  23. static class MyCreatedObject {
  24. private String key;
  25. private List<String> value1List = new ArrayList<>();
  26. private List<String> value2List = new ArrayList<>();
  27.  
  28. static Collector<MyObject, ?, MyCreatedObject> collector() {
  29. return Collector.of(MyCreatedObject::new, MyCreatedObject::add, MyCreatedObject::merge);
  30. }
  31.  
  32. void add(MyObject o) {
  33. key = o.key;
  34. value1List.add(o.value1);
  35. value2List.add(o.value2);
  36. }
  37.  
  38. MyCreatedObject merge(MyCreatedObject other) {
  39. key = other.key;
  40. value1List.addAll(other.value1List);
  41. value2List.addAll(other.value2List);
  42. return this;
  43. }
  44.  
  45. @Override
  46. public String toString() {
  47. return String.format("{key=%s, value1List=%s, value2List=%s}",
  48. key, value1List, value2List);
  49. }
  50. }
  51.  
  52. public static void main(String[] args) {
  53. List<MyObject> list = Arrays.asList(
  54. new MyObject("1", "WWW", "EEE"),
  55. new MyObject("1", "WWW", "AAA"),
  56. new MyObject("2", "WWW", "EEE"));
  57.  
  58. Map<String, MyCreatedObject> grouped = list.stream()
  59. .collect(Collectors.groupingBy(o -> o.key, MyCreatedObject.collector()));
  60.  
  61. System.out.println(grouped.values());
  62. }
  63. }
Success #stdin #stdout 0.09s 48800KB
stdin
Standard input is empty
stdout
[{key=1, value1List=[WWW, WWW], value2List=[EEE, AAA]}, {key=2, value1List=[WWW], value2List=[EEE]}]