fork download
  1. import java.util.ArrayList;
  2. import java.util.Date;
  3. import java.util.List;
  4. import java.util.Map;
  5. import java.util.stream.Collectors;
  6. import java.util.function.*;
  7. import java.util.stream.*;
  8. import static java.util.stream.Collectors.*;
  9.  
  10. class LambdaTest {
  11. public static void main(String[] args) {
  12. List<Emp> list = new ArrayList<>();
  13.  
  14. Dept dept1 = new Dept(1);
  15. Dept dept2 = new Dept(2);
  16. Dept dept3 = new Dept(3);
  17.  
  18. list.add(new Emp(dept1, 500));
  19. list.add(new Emp(dept1, 1000));
  20. list.add(new Emp(dept1, 1500));
  21. list.add(new Emp(dept1, 2000));
  22.  
  23. list.add(new Emp(dept2, 1500));
  24. list.add(new Emp(dept2, 2000));
  25. list.add(new Emp(dept2, 2500));
  26. list.add(new Emp(dept2, 3000));
  27.  
  28. list.add(new Emp(dept3, 0));
  29. list.add(new Emp(dept3, 100));
  30. list.add(new Emp(dept3, 200));
  31. list.add(new Emp(dept3, 500));
  32.  
  33. new LambdaTest().rankedBySalAndFilter(list);
  34. }
  35.  
  36.  
  37. public static <T, A, R> Collector<T, ?, R> filtering(Predicate<? super T> predicate, Collector<? super T, A, R> collector) {
  38. BiConsumer<A, ? super T> downstream = collector.accumulator();
  39. return Collector.<T, A, R>of(collector.supplier(),
  40. (a, t) -> {if (predicate.test(t)) downstream.accept(a, t);},
  41. collector.combiner(), collector.finisher(),
  42. collector.characteristics().stream().toArray(Collector.Characteristics[]::new));
  43. }
  44.  
  45. void rankedBySalAndFilter(List<Emp> list) {
  46. Map<Dept, Long> map = list.stream()
  47. .filter(emp -> emp.sal > 1000)
  48. .collect(groupingBy(emp -> emp.dept, counting()));
  49.  
  50. System.out.println(map);
  51. }
  52.  
  53. static class Emp {
  54. Emp(Dept dept, Integer sal) {
  55. this.dept = dept;
  56. this.sal = sal;
  57. }
  58.  
  59. Integer empno;
  60. Dept dept;
  61. String ename;
  62. String job;
  63. Integer mgr;
  64. Date hiredate;
  65. Integer sal;
  66. Integer comm;
  67. }
  68.  
  69. static class Dept {
  70. Dept(Integer deptno) {
  71. this.deptno = deptno;
  72. }
  73.  
  74. Integer deptno;
  75. String dname;
  76. String loc;
  77.  
  78. @Override
  79. public String toString() {
  80. return "deptno" + deptno;
  81. }
  82. }
  83. }
  84.  
Success #stdin #stdout 0.23s 321024KB
stdin
Standard input is empty
stdout
{deptno2=4, deptno1=2}