import java.util.*;
import java.util.function.*;
import java.util.stream.*;
class Ideone {
public static void main
(String args
[]){ List
<String
> strings
= List.
of("a",
"bb",
"cc",
"ddd");
Map
<Integer, List
<Character
>> result1
= strings.
stream() .map(toStringList())
.
collect(Collectors.
groupingBy(List::size
, Collectors.
reducing(List.
of(),concat
()) ));
Map
<Integer,ObjStr2
> result2
= strings.
stream() .map(ObjStr1::new)
.collect(Collectors.groupingBy(ObjStr1::getLen
, Collectors.reducing(new ObjStr2(), ObjStr1::to2, ObjStr2::doReduce)));
}
private static Function
<String, List
<Character
>> toStringList
(){ return s-> s.chars()
.mapToObj(c->(char) c)
.collect(Collectors.toList());
}
private static BinaryOperator<List<Character>> concat(){
return (l1, l2) -> {
return Stream.concat(l1.stream(), l2.stream()).collect(Collectors.toList());
};
}
}
class ObjStr1{
this.str = str;
}
static ObjStr2 to2(ObjStr1 o){
return new ObjStr2(o.str);
}
Integer getLen
(){return str.
length(); }; }
class ObjStr2{
ObjStr2(){}
this.str = str;
}
static ObjStr2 doReduce(ObjStr2 a, ObjStr2 b){
return new ObjStr2(a.str + b.str);
}
@Override
return str;
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLio7CmltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLio7CgpjbGFzcyBJZGVvbmUgewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSl7CiAgICAgICAgTGlzdDxTdHJpbmc+IHN0cmluZ3MgPSBMaXN0Lm9mKCJhIiwgImJiIiwgImNjIiwgImRkZCIpOwoKICAgICAgICBNYXA8SW50ZWdlciwgTGlzdDxDaGFyYWN0ZXI+PiByZXN1bHQxID0gc3RyaW5ncy5zdHJlYW0oKQogICAgICAgICAgICAgICAgLm1hcCh0b1N0cmluZ0xpc3QoKSkKICAgICAgICAgICAgICAgIC5jb2xsZWN0KENvbGxlY3RvcnMuZ3JvdXBpbmdCeShMaXN0OjpzaXplCiAgICAgICAgICAgICAgICAgICAgICAgICwgQ29sbGVjdG9ycy5yZWR1Y2luZyhMaXN0Lm9mKCksY29uY2F0KCkpCiAgICAgICAgICAgICAgICApKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmVzdWx0MSk7CgogICAgICAgIE1hcDxJbnRlZ2VyLE9ialN0cjI+IHJlc3VsdDIgPSBzdHJpbmdzLnN0cmVhbSgpCiAgICAgICAgICAgICAgICAubWFwKE9ialN0cjE6Om5ldykKICAgICAgICAgICAgICAgIC5jb2xsZWN0KENvbGxlY3RvcnMuZ3JvdXBpbmdCeShPYmpTdHIxOjpnZXRMZW4KICAgICAgICAgICAgICAgICAgICAgICAgLCBDb2xsZWN0b3JzLnJlZHVjaW5nKG5ldyBPYmpTdHIyKCksIE9ialN0cjE6OnRvMiwgT2JqU3RyMjo6ZG9SZWR1Y2UpKSk7CgogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXN1bHQyKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBGdW5jdGlvbjxTdHJpbmcsIExpc3Q8Q2hhcmFjdGVyPj4gdG9TdHJpbmdMaXN0KCl7CiAgICAgICAgcmV0dXJuIHMtPiBzLmNoYXJzKCkKICAgICAgICAgICAgICAgIC5tYXBUb09iaihjLT4oY2hhcikgYykKICAgICAgICAgICAgICAgIC5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIEJpbmFyeU9wZXJhdG9yPExpc3Q8Q2hhcmFjdGVyPj4gY29uY2F0KCl7CiAgICAgICAgcmV0dXJuIChsMSwgbDIpIC0+IHsKICAgICAgICAgICAgcmV0dXJuIFN0cmVhbS5jb25jYXQobDEuc3RyZWFtKCksIGwyLnN0cmVhbSgpKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOwogICAgICAgIH07CiAgICB9CgoKfQoKY2xhc3MgT2JqU3RyMXsKICAgIFN0cmluZyBzdHIgPSAiIjsKCiAgICBPYmpTdHIxKFN0cmluZyBzdHIpIHsKICAgICAgICB0aGlzLnN0ciA9IHN0cjsKICAgIH0KCiAgICBzdGF0aWMgT2JqU3RyMiB0bzIoT2JqU3RyMSBvKXsKICAgICAgICByZXR1cm4gbmV3IE9ialN0cjIoby5zdHIpOwogICAgfQoKICAgIEludGVnZXIgZ2V0TGVuKCl7cmV0dXJuIHN0ci5sZW5ndGgoKTsgfTsKfQoKY2xhc3MgT2JqU3RyMnsKICAgIFN0cmluZyBzdHIgPSAiIjsKCiAgICBPYmpTdHIyKCl7fQoKICAgIE9ialN0cjIoU3RyaW5nIHN0cikgewogICAgICAgIHRoaXMuc3RyID0gc3RyOwogICAgfQoKICAgIHN0YXRpYyBPYmpTdHIyIGRvUmVkdWNlKE9ialN0cjIgYSwgT2JqU3RyMiBiKXsKICAgICAgICByZXR1cm4gbmV3IE9ialN0cjIoYS5zdHIgKyBiLnN0cik7CiAgICB9CgogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCl7CiAgICAgICAgcmV0dXJuIHN0cjsKICAgIH0KfQ==
{1=[a], 2=[b, b, c, c], 3=[d, d, d]}
{1=a, 2=bbcc, 3=ddd}