fork(3) 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. .collect(groupingBy(emp -> emp.dept, filtering(emp -> emp.sal > 1000, counting())));
  48.  
  49. System.out.println(map);
  50. }
  51.  
  52. static class Emp {
  53. Emp(Dept dept, Integer sal) {
  54. this.dept = dept;
  55. this.sal = sal;
  56. }
  57.  
  58. Integer empno;
  59. Dept dept;
  60. String ename;
  61. String job;
  62. Integer mgr;
  63. Date hiredate;
  64. Integer sal;
  65. Integer comm;
  66. }
  67.  
  68. static class Dept {
  69. Dept(Integer deptno) {
  70. this.deptno = deptno;
  71. }
  72.  
  73. Integer deptno;
  74. String dname;
  75. String loc;
  76.  
  77. @Override
  78. public String toString() {
  79. return "deptno" + deptno;
  80. }
  81. }
  82. }
  83.  
Success #stdin #stdout 0.26s 321152KB
stdin
Standard input is empty
stdout
{deptno3=0, deptno2=4, deptno1=2}