/* 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
{
static class MyObject {
this.key = key;
this.value1 = value1;
this.value2 = value2;
}
}
static class MyCreatedObject {
private List<String> value1List = new ArrayList<>();
private List<String> value2List = new ArrayList<>();
static Collector<MyObject, ?, MyCreatedObject> collector() {
return Collector.of(MyCreatedObject::new, MyCreatedObject::add, MyCreatedObject::merge);
}
void add(MyObject o) {
key = o.key;
value1List.add(o.value1);
value2List.add(o.value2);
}
MyCreatedObject merge(MyCreatedObject other) {
key = other.key;
value1List.addAll(other.value1List);
value2List.addAll(other.value2List);
return this;
}
@Override
return String.
format("{key=%s, value1List=%s, value2List=%s}",
key, value1List, value2List);
}
}
public static void main
(String[] args
) { List
<MyObject
> list
= Arrays.
asList( new MyObject("1", "WWW", "EEE"),
new MyObject("1", "WWW", "AAA"),
new MyObject("2", "WWW", "EEE"));
Map
<String, MyCreatedObject
> grouped
= list.
stream() .collect(Collectors.groupingBy(o -> o.key, MyCreatedObject.collector()));
System.
out.
println(grouped.
values()); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLnN0cmVhbS4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKICAgIHN0YXRpYyBjbGFzcyBNeU9iamVjdCB7CiAgICAgICAgcHJpdmF0ZSBTdHJpbmcga2V5OwogICAgICAgIHByaXZhdGUgU3RyaW5nIHZhbHVlMTsKICAgICAgICBwcml2YXRlIFN0cmluZyB2YWx1ZTI7CgogICAgICAgIE15T2JqZWN0KFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZTEsIFN0cmluZyB2YWx1ZTIpIHsKICAgICAgICAgICAgdGhpcy5rZXkgPSBrZXk7CiAgICAgICAgICAgIHRoaXMudmFsdWUxID0gdmFsdWUxOwogICAgICAgICAgICB0aGlzLnZhbHVlMiA9IHZhbHVlMjsKICAgICAgICB9CiAgICB9CgogICAgc3RhdGljIGNsYXNzIE15Q3JlYXRlZE9iamVjdCB7CiAgICAgICAgcHJpdmF0ZSBTdHJpbmcga2V5OwogICAgICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IHZhbHVlMUxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiB2YWx1ZTJMaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CgogICAgICAgIHN0YXRpYyBDb2xsZWN0b3I8TXlPYmplY3QsID8sIE15Q3JlYXRlZE9iamVjdD4gY29sbGVjdG9yKCkgewogICAgICAgICAgICByZXR1cm4gQ29sbGVjdG9yLm9mKE15Q3JlYXRlZE9iamVjdDo6bmV3LCBNeUNyZWF0ZWRPYmplY3Q6OmFkZCwgTXlDcmVhdGVkT2JqZWN0OjptZXJnZSk7CiAgICAgICAgfQoKICAgICAgICB2b2lkIGFkZChNeU9iamVjdCBvKSB7CiAgICAgICAgICAgIGtleSA9IG8ua2V5OwogICAgICAgICAgICB2YWx1ZTFMaXN0LmFkZChvLnZhbHVlMSk7CiAgICAgICAgICAgIHZhbHVlMkxpc3QuYWRkKG8udmFsdWUyKTsKICAgICAgICB9CgogICAgICAgIE15Q3JlYXRlZE9iamVjdCBtZXJnZShNeUNyZWF0ZWRPYmplY3Qgb3RoZXIpIHsKICAgICAgICAgICAga2V5ID0gb3RoZXIua2V5OwogICAgICAgICAgICB2YWx1ZTFMaXN0LmFkZEFsbChvdGhlci52YWx1ZTFMaXN0KTsKICAgICAgICAgICAgdmFsdWUyTGlzdC5hZGRBbGwob3RoZXIudmFsdWUyTGlzdCk7CiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoIntrZXk9JXMsIHZhbHVlMUxpc3Q9JXMsIHZhbHVlMkxpc3Q9JXN9IiwKICAgICAgICAgICAgICAgICAgICBrZXksIHZhbHVlMUxpc3QsIHZhbHVlMkxpc3QpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgTGlzdDxNeU9iamVjdD4gbGlzdCA9IEFycmF5cy5hc0xpc3QoCiAgICAgICAgICAgICAgICBuZXcgTXlPYmplY3QoIjEiLCAiV1dXIiwgIkVFRSIpLAogICAgICAgICAgICAgICAgbmV3IE15T2JqZWN0KCIxIiwgIldXVyIsICJBQUEiKSwKICAgICAgICAgICAgICAgIG5ldyBNeU9iamVjdCgiMiIsICJXV1ciLCAiRUVFIikpOwoKICAgICAgICBNYXA8U3RyaW5nLCBNeUNyZWF0ZWRPYmplY3Q+IGdyb3VwZWQgPSBsaXN0LnN0cmVhbSgpCiAgICAgICAgICAgICAgICAuY29sbGVjdChDb2xsZWN0b3JzLmdyb3VwaW5nQnkobyAtPiBvLmtleSwgTXlDcmVhdGVkT2JqZWN0LmNvbGxlY3RvcigpKSk7CgogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihncm91cGVkLnZhbHVlcygpKTsKICAgIH0KfQ==
[{key=1, value1List=[WWW, WWW], value2List=[EEE, AAA]}, {key=2, value1List=[WWW], value2List=[EEE]}]