import java.util.*;
import java.util.stream.*;
class Shop {
public static void main
(String[] args
) { List
<Shop
> shops
= Arrays.
asList( new Shop("Walmart", "Hammer", 100),
new Shop("Target", "Scissor", 30),
new Shop("Walgreens", "Hammer", 300),
new Shop("Glens", "Hammer", 500),
new Shop("Walmart", "Scissor", 75),
new Shop("Toms", "Hammer", 150)
);
Map
<String, List
<Shop
>> result
= shops.
stream() .collect(Collectors.groupingBy(Shop::item, Collectors.collectingAndThen(Collectors.toList(), list -> {
return list.
subList(0,
Math.
min(3, list.
size())); })));
result.forEach((k, v) -> {
v.
forEach(subshop
-> System.
out.
println(" - " + subshop
)); });
}
int size;
this.name = name;
this.item = item;
this.size = size;
}
return name;
}
return item;
}
int size() {
return size;
}
@Override
return String.
format("Shop(name=%s, item=%s, size=%s)", name, item, size
); }
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLnN0cmVhbS4qOwoKY2xhc3MgU2hvcCB7CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIExpc3Q8U2hvcD4gc2hvcHMgPSBBcnJheXMuYXNMaXN0KAogICAgICAgICAgICBuZXcgU2hvcCgiV2FsbWFydCIsICJIYW1tZXIiLCAxMDApLAogICAgICAgICAgICBuZXcgU2hvcCgiVGFyZ2V0IiwgIlNjaXNzb3IiLCAzMCksCiAgICAgICAgICAgIG5ldyBTaG9wKCJXYWxncmVlbnMiLCAiSGFtbWVyIiwgMzAwKSwKICAgICAgICAgICAgbmV3IFNob3AoIkdsZW5zIiwgIkhhbW1lciIsIDUwMCksCiAgICAgICAgICAgIG5ldyBTaG9wKCJXYWxtYXJ0IiwgIlNjaXNzb3IiLCA3NSksCiAgICAgICAgICAgIG5ldyBTaG9wKCJUb21zIiwgIkhhbW1lciIsIDE1MCkKICAgICAgICApOwoKICAgICAgICBNYXA8U3RyaW5nLCBMaXN0PFNob3A+PiByZXN1bHQgPSBzaG9wcy5zdHJlYW0oKQogICAgICAgICAgICAuY29sbGVjdChDb2xsZWN0b3JzLmdyb3VwaW5nQnkoU2hvcDo6aXRlbSwgQ29sbGVjdG9ycy5jb2xsZWN0aW5nQW5kVGhlbihDb2xsZWN0b3JzLnRvTGlzdCgpLCBsaXN0IC0+IHsKICAgICAgICAgICAgICAgIENvbGxlY3Rpb25zLnNvcnQobGlzdCwgQ29tcGFyYXRvci5jb21wYXJpbmcoKFNob3Agc2hvcCkgLT4gc2hvcC5zaXplKCkpLnJldmVyc2VkKCkpOwogICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Quc3ViTGlzdCgwLCBNYXRoLm1pbigzLCBsaXN0LnNpemUoKSkpOwogICAgICAgICAgICB9KSkpOwogICAgICAgIHJlc3VsdC5mb3JFYWNoKChrLCB2KSAtPiB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihrKTsKICAgICAgICAgICAgdi5mb3JFYWNoKHN1YnNob3AgLT4gU3lzdGVtLm91dC5wcmludGxuKCIgIC0gIiArIHN1YnNob3ApKTsKICAgICAgICB9KTsKICAgIH0KCiAgICBTdHJpbmcgbmFtZTsKICAgIFN0cmluZyBpdGVtOwogICAgaW50IHNpemU7CgogICAgU2hvcChTdHJpbmcgbmFtZSwgU3RyaW5nIGl0ZW0sIGludCBzaXplKSB7CiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICB0aGlzLml0ZW0gPSBpdGVtOwogICAgICAgIHRoaXMuc2l6ZSA9IHNpemU7CiAgICB9CgogICAgU3RyaW5nIG5hbWUoKSB7CiAgICAgICAgcmV0dXJuIG5hbWU7CiAgICB9CgogICAgU3RyaW5nIGl0ZW0oKSB7CiAgICAgICAgcmV0dXJuIGl0ZW07CiAgICB9CgogICAgaW50IHNpemUoKSB7CiAgICAgICAgcmV0dXJuIHNpemU7CiAgICB9CgoKICAgIEBPdmVycmlkZQogICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgiU2hvcChuYW1lPSVzLCBpdGVtPSVzLCBzaXplPSVzKSIsIG5hbWUsIGl0ZW0sIHNpemUpOwogICAgfQp9