import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.function.*;
import java.util.stream.*;
import static java.util.stream.Collectors.*;
class LambdaTest {
public static void main
(String[] args
) { List<Emp> list = new ArrayList<>();
Dept dept1 = new Dept(1);
Dept dept2 = new Dept(2);
Dept dept3 = new Dept(3);
list.add(new Emp(dept1, 500));
list.add(new Emp(dept1, 1000));
list.add(new Emp(dept1, 1500));
list.add(new Emp(dept1, 2000));
list.add(new Emp(dept2, 1500));
list.add(new Emp(dept2, 2000));
list.add(new Emp(dept2, 2500));
list.add(new Emp(dept2, 3000));
list.add(new Emp(dept3, 0));
list.add(new Emp(dept3, 100));
list.add(new Emp(dept3, 200));
list.add(new Emp(dept3, 500));
new LambdaTest().rankedBySalAndFilter(list);
}
public static <T, A, R> Collector<T, ?, R> filtering(Predicate<? super T> predicate, Collector<? super T, A, R> collector) {
BiConsumer<A, ? super T> downstream = collector.accumulator();
return Collector.<T, A, R>of(collector.supplier(),
(a, t) -> {if (predicate.test(t)) downstream.accept(a, t);},
collector.combiner(), collector.finisher(),
collector.characteristics().stream().toArray(Collector.Characteristics[]::new));
}
void rankedBySalAndFilter(List<Emp> list) {
Map<Dept, Long> map = list.stream()
.filter(emp -> emp.sal > 1000)
.collect(groupingBy(emp -> emp.dept, counting()));
}
static class Emp {
this.dept = dept;
this.sal = sal;
}
Dept dept;
}
static class Dept {
this.deptno = deptno;
}
@Override
return "deptno" + deptno;
}
}
}
aW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKaW1wb3J0IGphdmEudXRpbC5MaXN0OwppbXBvcnQgamF2YS51dGlsLk1hcDsKaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi4qOwppbXBvcnQgamF2YS51dGlsLnN0cmVhbS4qOwppbXBvcnQgc3RhdGljIGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9ycy4qOwoKY2xhc3MgTGFtYmRhVGVzdCB7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgTGlzdDxFbXA+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKCiAgICAgICAgRGVwdCBkZXB0MSA9IG5ldyBEZXB0KDEpOwogICAgICAgIERlcHQgZGVwdDIgPSBuZXcgRGVwdCgyKTsKICAgICAgICBEZXB0IGRlcHQzID0gbmV3IERlcHQoMyk7CgogICAgICAgIGxpc3QuYWRkKG5ldyBFbXAoZGVwdDEsIDUwMCkpOwogICAgICAgIGxpc3QuYWRkKG5ldyBFbXAoZGVwdDEsIDEwMDApKTsKICAgICAgICBsaXN0LmFkZChuZXcgRW1wKGRlcHQxLCAxNTAwKSk7CiAgICAgICAgbGlzdC5hZGQobmV3IEVtcChkZXB0MSwgMjAwMCkpOwoKICAgICAgICBsaXN0LmFkZChuZXcgRW1wKGRlcHQyLCAxNTAwKSk7CiAgICAgICAgbGlzdC5hZGQobmV3IEVtcChkZXB0MiwgMjAwMCkpOwogICAgICAgIGxpc3QuYWRkKG5ldyBFbXAoZGVwdDIsIDI1MDApKTsKICAgICAgICBsaXN0LmFkZChuZXcgRW1wKGRlcHQyLCAzMDAwKSk7CgogICAgICAgIGxpc3QuYWRkKG5ldyBFbXAoZGVwdDMsIDApKTsKICAgICAgICBsaXN0LmFkZChuZXcgRW1wKGRlcHQzLCAxMDApKTsKICAgICAgICBsaXN0LmFkZChuZXcgRW1wKGRlcHQzLCAyMDApKTsKICAgICAgICBsaXN0LmFkZChuZXcgRW1wKGRlcHQzLCA1MDApKTsKCiAgICAgICAgbmV3IExhbWJkYVRlc3QoKS5yYW5rZWRCeVNhbEFuZEZpbHRlcihsaXN0KTsKICAgIH0KICAgIAogICAgCiAgICBwdWJsaWMgc3RhdGljIDxULCBBLCBSPiBDb2xsZWN0b3I8VCwgPywgUj4gZmlsdGVyaW5nKFByZWRpY2F0ZTw/IHN1cGVyIFQ+IHByZWRpY2F0ZSwgQ29sbGVjdG9yPD8gc3VwZXIgVCwgQSwgUj4gY29sbGVjdG9yKSB7CiAgICAgICAgQmlDb25zdW1lcjxBLCA/IHN1cGVyIFQ+IGRvd25zdHJlYW0gPSBjb2xsZWN0b3IuYWNjdW11bGF0b3IoKTsKICAgICAgICByZXR1cm4gQ29sbGVjdG9yLjxULCBBLCBSPm9mKGNvbGxlY3Rvci5zdXBwbGllcigpLAogICAgICAgICAgICAgICAgKGEsIHQpIC0+IHtpZiAocHJlZGljYXRlLnRlc3QodCkpIGRvd25zdHJlYW0uYWNjZXB0KGEsIHQpO30sCiAgICAgICAgICAgICAgICBjb2xsZWN0b3IuY29tYmluZXIoKSwgY29sbGVjdG9yLmZpbmlzaGVyKCksCiAgICAgICAgICAgICAgICBjb2xsZWN0b3IuY2hhcmFjdGVyaXN0aWNzKCkuc3RyZWFtKCkudG9BcnJheShDb2xsZWN0b3IuQ2hhcmFjdGVyaXN0aWNzW106Om5ldykpOwogICAgfQoKICAgIHZvaWQgcmFua2VkQnlTYWxBbmRGaWx0ZXIoTGlzdDxFbXA+IGxpc3QpIHsKICAgICAgICBNYXA8RGVwdCwgTG9uZz4gbWFwID0gbGlzdC5zdHJlYW0oKQogICAgICAgIAkuZmlsdGVyKGVtcCAtPiBlbXAuc2FsID4gMTAwMCkKICAgICAgICAgICAgLmNvbGxlY3QoZ3JvdXBpbmdCeShlbXAgLT4gZW1wLmRlcHQsIGNvdW50aW5nKCkpKTsKCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1hcCk7CiAgICB9CgogICAgc3RhdGljIGNsYXNzIEVtcCB7CiAgICAgICAgRW1wKERlcHQgZGVwdCwgSW50ZWdlciBzYWwpIHsKICAgICAgICAgICAgdGhpcy5kZXB0ID0gZGVwdDsKICAgICAgICAgICAgdGhpcy5zYWwgPSBzYWw7CiAgICAgICAgfQoKICAgICAgICBJbnRlZ2VyIGVtcG5vOwogICAgICAgIERlcHQgZGVwdDsKICAgICAgICBTdHJpbmcgZW5hbWU7CiAgICAgICAgU3RyaW5nIGpvYjsKICAgICAgICBJbnRlZ2VyIG1ncjsKICAgICAgICBEYXRlIGhpcmVkYXRlOwogICAgICAgIEludGVnZXIgc2FsOwogICAgICAgIEludGVnZXIgY29tbTsKICAgIH0KCiAgICBzdGF0aWMgY2xhc3MgRGVwdCB7CiAgICAgICAgRGVwdChJbnRlZ2VyIGRlcHRubykgewogICAgICAgICAgICB0aGlzLmRlcHRubyA9IGRlcHRubzsKICAgICAgICB9CgogICAgICAgIEludGVnZXIgZGVwdG5vOwogICAgICAgIFN0cmluZyBkbmFtZTsKICAgICAgICBTdHJpbmcgbG9jOwoKICAgICAgICBAT3ZlcnJpZGUKICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICAgICByZXR1cm4gImRlcHRubyIgKyBkZXB0bm87CiAgICAgICAgfQogICAgfQp9Cg==