/* package whatever; // don't place package name! */
import java.util.*;
import java.util.function.*;
import java.util.stream.*;
import java.lang.*;
import java.io.*;
class Ideone
{
{
PredicateFactory predicateFactory = new PredicateFactoryImpl();
FilterFactory filterFactory = new FilterFactoryImpl();
StreamFactory streamFactory = new StreamFactoryImpl();
streamFactory.create()
.stream()
.map(filterFactory.create())
.filter(predicateFactory.create())
.collect(Collectors.toList())
.
forEach(System.
out::println
); ;
}
interface PredicateFactory{
Predicate<Integer> create();
}
static class PredicateFactoryImpl implements PredicateFactory{
@Override
public Predicate<Integer> create() {
return new Predicate<Integer>() {
@Override
return x > 0 && x < 6;
}
};
}
}
interface FilterFactory{
Function
<Integer,Integer
> create
(); }
static class FilterFactoryImpl implements FilterFactory{
@Override
public Function
<Integer,Integer
> create
() { return new Function
<Integer,Integer
> (){ @Override
return x%10;
}
};
}
}
interface StreamFactory{
List<Integer> create();
}
static class StreamFactoryImpl implements StreamFactory{
@Override
public List<Integer> create() {
return Arrays.
asList(0,
1,
-2,
-3,
-4,
5,
-6,
-7 ,
-8,
-9,
10,
-11,
12,
14,
13); }
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLio7CmltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLio7CmltcG9ydCBqYXZhLmxhbmcuKjsKaW1wb3J0IGphdmEuaW8uKjsKCgpjbGFzcyBJZGVvbmUKewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgogICAgICAgIFByZWRpY2F0ZUZhY3RvcnkgcHJlZGljYXRlRmFjdG9yeSA9IG5ldyBQcmVkaWNhdGVGYWN0b3J5SW1wbCgpOwogICAgICAgIEZpbHRlckZhY3RvcnkgICAgZmlsdGVyRmFjdG9yeSAgICA9IG5ldyBGaWx0ZXJGYWN0b3J5SW1wbCgpOwogICAgICAgIFN0cmVhbUZhY3RvcnkgICAgc3RyZWFtRmFjdG9yeSAgICA9IG5ldyBTdHJlYW1GYWN0b3J5SW1wbCgpOwoKICAgICAgICBzdHJlYW1GYWN0b3J5LmNyZWF0ZSgpCiAgICAgICAgLnN0cmVhbSgpCiAgICAgICAgLm1hcChmaWx0ZXJGYWN0b3J5LmNyZWF0ZSgpKSAgICAgICAgCiAgICAgICAgLmZpbHRlcihwcmVkaWNhdGVGYWN0b3J5LmNyZWF0ZSgpKQogICAgICAgIC5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpCiAgICAgICAgLmZvckVhY2goU3lzdGVtLm91dDo6cHJpbnRsbik7CiAgICAgICAgOwoJfQoKICAgIAogICAgaW50ZXJmYWNlIFByZWRpY2F0ZUZhY3Rvcnl7CiAgICAgICAgUHJlZGljYXRlPEludGVnZXI+IGNyZWF0ZSgpOwogICAgfQogICAgc3RhdGljIGNsYXNzIFByZWRpY2F0ZUZhY3RvcnlJbXBsIGltcGxlbWVudHMgUHJlZGljYXRlRmFjdG9yeXsKICAgICAgICBAT3ZlcnJpZGUKICAgICAgICBwdWJsaWMgUHJlZGljYXRlPEludGVnZXI+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBQcmVkaWNhdGU8SW50ZWdlcj4oKSB7CiAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIHRlc3QoSW50ZWdlciB4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHggPiAwICYmIHggPCA2OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICBpbnRlcmZhY2UgRmlsdGVyRmFjdG9yeXsKICAgICAgICBGdW5jdGlvbjxJbnRlZ2VyLEludGVnZXI+ICBjcmVhdGUoKTsKICAgIH0KICAgIHN0YXRpYyBjbGFzcyBGaWx0ZXJGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIEZpbHRlckZhY3Rvcnl7CiAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgcHVibGljIEZ1bmN0aW9uPEludGVnZXIsSW50ZWdlcj4gIGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxJbnRlZ2VyLEludGVnZXI+ICgpewogICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICBwdWJsaWMgSW50ZWdlciBhcHBseShJbnRlZ2VyIHgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4geCUxMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgaW50ZXJmYWNlIFN0cmVhbUZhY3Rvcnl7CiAgICAgICAgTGlzdDxJbnRlZ2VyPiAgY3JlYXRlKCk7CiAgICB9CiAgICBzdGF0aWMgY2xhc3MgU3RyZWFtRmFjdG9yeUltcGwgaW1wbGVtZW50cyBTdHJlYW1GYWN0b3J5ewogICAgICAgIEBPdmVycmlkZQogICAgICAgIHB1YmxpYyBMaXN0PEludGVnZXI+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIEFycmF5cy5hc0xpc3QoMCwgMSwgLTIsIC0zLCAtNCwgNSwtNiwgLTcgLCAtOCwgLTksIDEwLCAtMTEsIDEyLCAxNCwgMTMpOwogICAgICAgIH0KICAgIH0KfQ==