fork(1) download
  1. import java.util.Map;
  2. import java.util.stream.Collectors;
  3. import java.util.stream.Stream;
  4.  
  5. class Ideone {
  6.  
  7. static class Stats {
  8. final int data, num;
  9.  
  10. public Stats() {
  11. data = num = 0;
  12. }
  13.  
  14. public Stats(int data, int num) {
  15. this.data = data;
  16. this.num = num;
  17. }
  18.  
  19. public Stats merge(Stats stats) {
  20. return new Stats(this.data+stats.data, this.num+stats.num);
  21. }
  22.  
  23. public int getData(){
  24. return data;
  25. }
  26. public int getNum(){
  27. return num;
  28. }
  29.  
  30. @Override
  31. public String toString() {
  32. return "{" + data + "," + num + "}";
  33. }
  34. }
  35.  
  36. public static void main(String[] args) {
  37. Stream<String> lines = Stream.of("item1,16,2",
  38. "item2,17,3",
  39. "item1,16,5"); // sample input
  40.  
  41. Map<String, Stats> map = lines.map(s -> s.split(",")).collect(
  42. Collectors.groupingBy(a -> a[0],
  43. Collectors.mapping(a -> new Stats(Integer.parseInt(a[1]), Integer.parseInt(a[2])),
  44. Collectors.reducing(new Stats(), Stats::merge))));
  45.  
  46. System.out.println(map);
  47. }
  48.  
  49. }
  50.  
Success #stdin #stdout 0.2s 320512KB
stdin
Standard input is empty
stdout
{item2={17,3}, item1={32,7}}