import java.util.*;
import java.util.function.*;
import java.util.stream.*;
class Mappers {
public static final Function<List<IntUnaryOperator>, UnaryOperator<List<Integer>>> reduce =
opList -> argList -> argList.stream()
.flatMap(arg -> IntStream.range(0, opList.size())
.mapToObj(iLastOp -> opList.subList(0, 1 + iLastOp).stream()
.reduce(IntUnaryOperator::andThen).get()
.applyAsInt(arg)))
.collect(Collectors.toList());
public static final Function<List<IntUnaryOperator>, UnaryOperator<List<Integer>>> collect =
opList -> argList -> argList.stream()
.flatMap(arg -> opList.stream()
.collect(Collector.of(
ArrayList<Integer>::new,
(a, b) -> a.add(b.applyAsInt(a.isEmpty() ? arg : a.get(a.size() - 1))),
.stream())
.collect(Collectors.toList());
public static final Function<List<IntUnaryOperator>, UnaryOperator<List<Integer>>> sane =
opList -> argList -> {
var r = new ArrayList<Integer>();
for (var arg : argList)
for (var op : opList) {
arg = op.applyAsInt(arg);
r.add(arg);
}
return r;
};
}
class Main {
public static void main
(String[] args
) { List.
of(Mappers.
reduce, Mappers.
collect, Mappers.
sane).
forEach(mapper
-> { var list
= mapper.
apply(List.
of(x
-> x, x
-> x
+ 1, x
-> x
* x
)).
apply(List.
of(1,
2)); });
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLio7CmltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLio7CgpjbGFzcyBNYXBwZXJzIHsKCXB1YmxpYyBzdGF0aWMgZmluYWwgRnVuY3Rpb248TGlzdDxJbnRVbmFyeU9wZXJhdG9yPiwgVW5hcnlPcGVyYXRvcjxMaXN0PEludGVnZXI+Pj4gcmVkdWNlID0KCQlvcExpc3QgLT4gYXJnTGlzdCAtPiBhcmdMaXN0LnN0cmVhbSgpCgkJCS5mbGF0TWFwKGFyZyAtPiBJbnRTdHJlYW0ucmFuZ2UoMCwgb3BMaXN0LnNpemUoKSkKCQkJCS5tYXBUb09iaihpTGFzdE9wIC0+IG9wTGlzdC5zdWJMaXN0KDAsIDEgKyBpTGFzdE9wKS5zdHJlYW0oKQoJCQkJCS5yZWR1Y2UoSW50VW5hcnlPcGVyYXRvcjo6YW5kVGhlbikuZ2V0KCkKCQkJCQkuYXBwbHlBc0ludChhcmcpKSkKCQkJLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7CgoJcHVibGljIHN0YXRpYyBmaW5hbCBGdW5jdGlvbjxMaXN0PEludFVuYXJ5T3BlcmF0b3I+LCBVbmFyeU9wZXJhdG9yPExpc3Q8SW50ZWdlcj4+PiBjb2xsZWN0ID0KCQlvcExpc3QgLT4gYXJnTGlzdCAtPiBhcmdMaXN0LnN0cmVhbSgpCgkJCS5mbGF0TWFwKGFyZyAtPiBvcExpc3Quc3RyZWFtKCkKCQkJCS5jb2xsZWN0KENvbGxlY3Rvci5vZigKCQkJCQlBcnJheUxpc3Q8SW50ZWdlcj46Om5ldywKCQkJCQkoYSwgYikgLT4gYS5hZGQoYi5hcHBseUFzSW50KGEuaXNFbXB0eSgpID8gYXJnIDogYS5nZXQoYS5zaXplKCkgLSAxKSkpLAoJCQkJCShhLCBiKSAtPiB7IHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOyB9KSkKCQkJCS5zdHJlYW0oKSkKCQkJLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7CgoJcHVibGljIHN0YXRpYyBmaW5hbCBGdW5jdGlvbjxMaXN0PEludFVuYXJ5T3BlcmF0b3I+LCBVbmFyeU9wZXJhdG9yPExpc3Q8SW50ZWdlcj4+PiBzYW5lID0KCQlvcExpc3QgLT4gYXJnTGlzdCAtPiB7CgkJCXZhciByID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigpOwoJCQlmb3IgKHZhciBhcmcgOiBhcmdMaXN0KQoJCQkJZm9yICh2YXIgb3AgOiBvcExpc3QpIHsKCQkJCQlhcmcgPSBvcC5hcHBseUFzSW50KGFyZyk7CgkJCQkJci5hZGQoYXJnKTsKCQkJCX0KCQkJcmV0dXJuIHI7CgkJfTsKfQoKY2xhc3MgTWFpbiB7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgkJTGlzdC5vZihNYXBwZXJzLnJlZHVjZSwgTWFwcGVycy5jb2xsZWN0LCBNYXBwZXJzLnNhbmUpLmZvckVhY2gobWFwcGVyIC0+IHsKCQkJdmFyIGxpc3QgPSBtYXBwZXIuYXBwbHkoTGlzdC5vZih4IC0+IHgsIHggLT4geCArIDEsIHggLT4geCAqIHgpKS5hcHBseShMaXN0Lm9mKDEsIDIpKTsKCQkJU3lzdGVtLm91dC5wcmludGxuKGxpc3QpOwoJCX0pOwoJfQp9
[1, 2, 4, 2, 3, 9]
[1, 2, 4, 2, 3, 9]
[1, 2, 4, 2, 3, 9]