/* package whatever; // don't place package name! */
import java.util.*;
import java.util.stream.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
Box boxContainer
= new BoxContainer
( new Leaf("red","fresh"),
new Leaf("white","dry"),
new Leaf("black","dry"),
new Leaf("green", "fresh"),
new BoxContainer(
new Leaf("red","fresh"),
new Leaf("white","dry"),
new Leaf("black","dry"),
new Leaf("green", "fresh")));
List<Leaf> leaves = boxContainer.leaves().collect(Collectors.toList());
}
Stream<Leaf> leaves();
}
static class BoxContainer
implements Box { final List<Box> allBoxes;
BoxContainer
(Box...
boxes) { this.
allBoxes = Arrays.
asList(boxes
); }
@Override
public Stream<Leaf> leaves() {
return allBoxes.
stream().
flatMap(Box::leaves
); }
}
static class Leaf
implements Box {
this.color = color;
this.state = state;
}
@Override
public Stream<Leaf> leaves() {
return Stream.of(this);
}
@Override
return "{color: " + color + ", state: " + state + "}";
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLnN0cmVhbS4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCUJveCBib3hDb250YWluZXIgPSBuZXcgQm94Q29udGFpbmVyKAoJCQkJbmV3IExlYWYoInJlZCIsImZyZXNoIiksCiAgICAgICAgICAgICAgICBuZXcgTGVhZigid2hpdGUiLCJkcnkiKSwKICAgICAgICAgICAgICAgIG5ldyBMZWFmKCJibGFjayIsImRyeSIpLAogICAgICAgICAgICAgICAgbmV3IExlYWYoImdyZWVuIiwgImZyZXNoIiksCiAgICAgICAgICAgICAgICBuZXcgQm94Q29udGFpbmVyKAogICAgICAgICAgICAgICAgCQluZXcgTGVhZigicmVkIiwiZnJlc2giKSwKCQkgICAgICAgICAgICAgICAgbmV3IExlYWYoIndoaXRlIiwiZHJ5IiksCgkJICAgICAgICAgICAgICAgIG5ldyBMZWFmKCJibGFjayIsImRyeSIpLAoJCSAgICAgICAgICAgICAgICBuZXcgTGVhZigiZ3JlZW4iLCAiZnJlc2giKSkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgTGlzdDxMZWFmPiBsZWF2ZXMgPSBib3hDb250YWluZXIubGVhdmVzKCkuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGVhdmVzKTsKCX0KCQoJaW50ZXJmYWNlIEJveCB7CgkJU3RyZWFtPExlYWY+IGxlYXZlcygpOwoJfQoJCglzdGF0aWMgY2xhc3MgQm94Q29udGFpbmVyIGltcGxlbWVudHMgQm94IHsKCQlmaW5hbCBMaXN0PEJveD4gYWxsQm94ZXM7CgkJCgkJQm94Q29udGFpbmVyKEJveC4uLiBib3hlcykgewoJCQl0aGlzLmFsbEJveGVzID0gQXJyYXlzLmFzTGlzdChib3hlcyk7CgkJfQoJCQoJCUBPdmVycmlkZQoJCXB1YmxpYyBTdHJlYW08TGVhZj4gbGVhdmVzKCkgewoJCQlyZXR1cm4gYWxsQm94ZXMuc3RyZWFtKCkuZmxhdE1hcChCb3g6OmxlYXZlcyk7CgkJfQoJfQoJCglzdGF0aWMgY2xhc3MgTGVhZiBpbXBsZW1lbnRzIEJveCB7CgkJZmluYWwgU3RyaW5nIGNvbG9yOwoJCWZpbmFsIFN0cmluZyBzdGF0ZTsKCQkKCQlMZWFmKFN0cmluZyBjb2xvciwgU3RyaW5nIHN0YXRlKSB7CgkJCXRoaXMuY29sb3IgPSBjb2xvcjsKCQkJdGhpcy5zdGF0ZSA9IHN0YXRlOwoJCX0KCQkKCQlAT3ZlcnJpZGUKCQlwdWJsaWMgU3RyZWFtPExlYWY+IGxlYXZlcygpIHsKCQkJcmV0dXJuIFN0cmVhbS5vZih0aGlzKTsKCQl9CgkJCgkJQE92ZXJyaWRlCgkJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKCQkJcmV0dXJuICJ7Y29sb3I6ICIgKyBjb2xvciArICIsIHN0YXRlOiAiICsgc3RhdGUgKyAifSI7CgkJfQoJfQp9
[{color: red, state: fresh}, {color: white, state: dry}, {color: black, state: dry}, {color: green, state: fresh}, {color: red, state: fresh}, {color: white, state: dry}, {color: black, state: dry}, {color: green, state: fresh}]